Глюки c переенными типа double!!!!!
От: chili1  
Дата: 14.03.07 13:50
Оценка: :))) :))) :))) :))) :))
Столкнулся с такой проблемой: при перемножении типов double возвращаются не объяснимые результаты

Код:
        double a1 = 0.3;
        double a2 = 3;
        double a3 = a1*a2;
        System.out.append(""+a3 + "\n");

Результат:
0.8999999999999999

        double a1 = Double.valueOf("0.3");
        double a2 = Double.valueOf("3");
        double a3 = a1*a2;
        System.out.append(""+a3 + "\n");

Результат:
0.8999999999999999

Даже если создавать классы Double, возвращается тоже самое!

Проблему удалось решить только при использовании класса BigDecimal(String digits).
А вот если создавать объект и передавать туда !String:
        BigDecimal a1 = new BigDecimal(0.3);//передавать значения !String
        BigDecimal a2 = new BigDecimal(3);//передавать значения !String
        BigDecimal a3 = a1.multiply(a2);
        System.out.append(""+a3 + "\n");


Результат становиться более крутым:
0.899999999999999966693309261245303787291049957275390625

Так вот такая операция работает правильно только при использовании класса BigDecimal с коструктором BigDecimal(String digits).

        BigDecimal a1 = new BigDecimal("0.3");
        BigDecimal a2 = new BigDecimal("3");
        BigDecimal a3 = a1.multiply(a2);
        System.out.append(""+a3 + "\n");

Результат:
0.9

Вы только не поймите, что такой глюк только на сочетании 2-х чисел (0.3,3). А их много...

В чем дело? Как это лечиться?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.