Проблема в десятичном значении - PullRequest
0 голосов
/ 31 августа 2010
private static DecimalFormat decimalFormat = new DecimalFormat("0.0000000000");
    public static void main(String[] args) {
            String str ="73.71" ; 
            BigDecimal decimal= new BigDecimal(str);
            System.out.println("Tesing1 " + decimal.floatValue()/10000);
            System.out.println("Tesing2 " + decimal.floatValue());
            BigDecimal bigDecimal = new BigDecimal(decimalFormat.format(decimal.doubleValue()/ 10000));
            System.out.println("Tesing3 " + bigDecimal);        
        }

В вышеприведенном коде вывод:

Тестирование1 0,007371 Тестирование2 73,71 Тестирование3 0,0073710000

Но когда я пытаюсь сохранить его в базе данных, используя hibernate, его значение становится равным 74. Выполнение округлениязаглушка.

Кто-нибудь знает, что является причиной.

Используя этот код, я сохраняю объект

public boolean save(Object transInstance) {
        boolean lSuccess = false;
        getHibernateTemplate().save(transInstance);
        lSuccess = true;

        return lSuccess;
    }

, и это запись файла .hbm для этого столбца иопределение столбца в таблице

<property name="actlRsltPt" type="big_decimal">
            <column name="ACTL_RSLT_PT" precision="6" scale="4" />
        </property>

ACTL_RSLT_PT NUMBER (6,4)

1 Ответ

1 голос
/ 31 августа 2010

Если есть проблема с Hibernate, проверьте, какие значения для масштаба, точности и типа данных имеются в ваших отображениях и в самой базе данных.

Кроме того, почему вы берете BigDecimal (произвольная точностьдесятичное число со знаком), а затем принимает значение float для деления?Это отрицает цель использования BigDecimal и возвращает к математике с плавающей запятой, которая может привести к неожиданным результатам.Вы должны разделить экземпляры BigDecimal с помощью метода BigDecimal.divide(BigDecimal) (или одной из его перегрузок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...