Мне интересно, как лучше всего исправить ошибки точности в 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 * 1011 *
41.579998
значение цикла: 44
83.159996
значение цикла: 88
166.31999
значение цикла: 176
332.63998
значение цикла: 352
665.27997
значение цикла: 704
1330.5599
Кроме того, если кто-то может объяснить, почему он делает это, начиная с 11 и удваивая значение каждый раз.Я думаю, что все другие значения (или, по крайней мере, многие из них) отображали правильный результат.
Подобные проблемы вызывали у меня головную боль в прошлом, и я обычно использую средства форматирования чисел или помещаю их в строку.
Редактировать: Как уже упоминалось, я мог бы использовать удвоение, но после попытки, кажется, что 1,89 как удвоенное число 792 по-прежнему выдает ошибку (вывод 1496.8799999999999).
Думаю, я попробую другие решения, такие как BigDecimal