Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Округление float JasperReports (Решено)
Список форумов
 ->  Печать (Printing API)


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 раз
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
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 писал(а):
Естественно надо округлить до второго знака


это все хорошо, только у меня расчет внутри отчета
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
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$
                                                 <--->
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
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>

Спасибо за участие
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
diw-volkodav : 103
Новичок
Откуда: Петербург

СообщениеОкт 07, 2009 14:50 
Ответить с цитатой
а можно сразу в рублях выводить и отделять тысячи от сотен пробелом:
Код:
<textField pattern="##,##0.00 ¤">

Но надо заметить, что денежная единица выводится та, которая установлена в системе
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Печать (Printing API)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru