Мне интересно, как лучше всего исправлять ошибки точности в Java. Как вы можете видеть в следующем примере, имеются ошибки точности:
class FloatTest
{
public static void main(String[] args)
{
Float number1 = 1.89f;
for(int i = 11; i < 800; i*=2)
{
System.out.println("loop value: " + i);
System.out.println(i*number1);
System.out.println("");
}
}
}
Отображаемый результат:
значение цикла: 11
20.789999
значение цикла: 22
41,579998
значение цикла: 44
83.159996
значение цикла: 88
166.31999
значение цикла: 176
332.63998
значение цикла: 352
665.27997
значение цикла: 704
1330.5599
Также, если кто-нибудь может объяснить, почему он делает это только начиная с 11 и каждый раз удваивая значение. Я думаю, что все остальные значения (или, по крайней мере, многие из них) показали правильный результат.
Подобные проблемы вызывали у меня головную боль в прошлом, и я обычно использую средства форматирования чисел или помещаю их в строку.
Изменить: Как уже упоминалось, я мог бы использовать двойное, но после попытки кажется, что 1,89 как двойное умножение на 792 по-прежнему выводит ошибку (результат 1496.8799999999999).
Думаю, я попробую другие решения например BigDecimal