Столкнулся с такой проблемой: при перемножении типов 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). А их много...
В чем дело? Как это лечиться?