У меня есть такая программа:
public class Main {
public static void main(String[] args) {
double nominal = 1.0;
double sum = 0;
for (int i = 0; i < 10; i++) {
sum += 0.1;
System.out.println("sum = " + sum);
}
if (nominal == sum) {
System.out.println("Числа равны!");
} else {
System.out.println("Числа не равны!");
}
}
}
По смыслу, результат сложения числа в цикле должен равняться 1, но результат выходит такой..:
sum = 0.1
sum = 0.2
sum = 0.30000000000000004
sum = 0.4
sum = 0.5
sum = 0.6
sum = 0.7
sum = 0.7999999999999999
sum = 0.8999999999999999
sum = 0.9999999999999999
Числа не равны!
Почему double суммируется не так, как нужно?
Ответ
Не все числа можно точно представить в виде double, таков стандарт вычислений с плавающей запятой - IEEE 754
Именно поэтому, для точных вычислений дробных чисел (деньги, единицы товара), применяют числа с фиксированной запятой, но никак не double или float
Числа с плавающей запятой прекрасно подходят для обработки научных расчетов и численного моделирования.
О сравнении чисел с плавающей запятой
Комментариев нет:
Отправить комментарий