|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
diw-volkodav : 103 Новичок Откуда: Петербург
|
Окт 07, 2009 10:51 |
|
|
Есть сумма покупок, сумма проданного и вычисление общей дельты по этим суммам:
| Код: |
<variable name="sum_price_buy" class="java.lang.Float" resetType="Report" calculation="Sum">
<variableExpression>
<![CDATA[$F{price_buy}]]>
</variableExpression>
</variable> |
| Код: |
<variable name="sum_price_sale" class="java.lang.Float" resetType="Report" calculation="Sum">
<variableExpression>
<![CDATA[$F{price_sale}]]>
</variableExpression>
</variable> |
| Код: |
<variable name="delta" class="java.lang.Float" resetType="Report">
<variableExpression>
<![CDATA[new Float($V{sum_price_sale}.floatValue()-$V{sum_price_buy}.floatValue())]]>
</variableExpression>
</variable> |
Вопрос, как мне округлить дельту до 2ух чисел после ноля? Пример: если сумма купленного 7410.47, сумма проданного 9984, дельта получится должна 2573.53, но выводится 2573.5298. Спасибо
Последний раз редактировалось: diw-volkodav (Окт 07, 2009 14:48), всего редактировалось 1 раз |
|
|
|
 |
gidravlic : 402 Бывалый Откуда: Латвия, Рига
|
Окт 07, 2009 13:31 |
|
|
Естественно надо округлить до второго знака, например использовать:
| Код: |
public static float round(float value, int decimalPlace) {
BigDecimal bd = new BigDecimal(Float.toString(value));
return bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP).floatValue();
}
|
|
|
|
|
 |
diw-volkodav : 103 Новичок Откуда: Петербург
|
Окт 07, 2009 13:43 |
|
|
| gidravlic писал(а): |
| Естественно надо округлить до второго знака |
это все хорошо, только у меня расчет внутри отчета |
|
|
|
 |
gidravlic : 402 Бывалый Откуда: Латвия, Рига
|
Окт 07, 2009 14:03 |
|
|
Ну а что мешает написать :
| Код: |
<variable name="delta" class="org.mycompany.Round" resetType="Report">
<variableExpression>
<![CDATA[new Round($V{sum_price_sale}.floatValue()-$V{sum_price_buy}.floatValue(), 2)]]>
</variableExpression>
</variable>
|
где Round:
| Код: |
package org.mycompany
public class Round {
public float Round(float value, int decimalPlace) {
BigDecimal bd = new BigDecimal(Float.toString(value));
return bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP).floatValue();
}
} |
|
|
|
|
 |
diw-volkodav : 103 Новичок Откуда: Петербург
|
Окт 07, 2009 14:31 |
|
|
хмм, создал класс Round, объявил переменную как вы написали(только пакет у меня другой). Выдалась ошибка:
| Код: |
1. Round cannot be resolved to a type
value = (aromat.logic.Round)(new Round(((java.lang.Float)variable_sum_price_sale.getValue()).floatValue()-((java.lang.Float)variable_sum_price_buy.getValue()).floatValue(), 2)); //$JR_EXPR_ID=10$
<--->
|
|
|
|
|
 |
diw-volkodav : 103 Новичок Откуда: Петербург
|
Окт 07, 2009 14:45 |
|
|
нашел то, что нужно:
надо было просто при вызове этой переменно указать pattern
| Код: |
<textField pattern="###0.00">
<reportElement x="602" y="3" width="90" height="20"/>
<textElement>
<font size="14" isBold="true"/>
</textElement>
<textFieldExpression class="java.lang.Float">
<![CDATA[$V{delta}]]>
</textFieldExpression>
</textField>
|
Спасибо за участие |
|
|
|
 |
diw-volkodav : 103 Новичок Откуда: Петербург
|
Окт 07, 2009 14:50 |
|
|
а можно сразу в рублях выводить и отделять тысячи от сотен пробелом:
| Код: |
| <textField pattern="##,##0.00 ¤"> |
Но надо заметить, что денежная единица выводится та, которая установлена в системе |
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Печать (Printing API) |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|