Проблема с добавлением значений Float в Java
У меня есть два значения
5042034.0
1425837.2
пока я добавляю как ниже
float abc = (float) (5042034.0 + 1425837.2);
Я ожидаю результата 6467871.2
Но я получаю 6467871.0
Как я мог получить 6467871.2
с помощью поплавка?
Я пробовал с
float c = (float) (1.1 + 2.2) ;
Я получил результат: 3.3
В чем причина этого?
4 ответа
Пытаться double
вместо.
double abc = (double) (5042034.0 + 1425837.2);
Поплавки - это 32-разрядные числа IEEE 754.
5042034,0 больше 2 ^ 22. Это означает, что он заполняет 23 бита мантисы, что является максимумом. Это фактически пропускает завершающий 0. Когда вы пытаетесь добавить его к 1425837.2, он корректирует оба числа:
10011001110111101110010.00
+ 101011100000110101101.0011001100110011001101....
--------------------------
11000101011000100011111.0
в двоичной системе Это означает, что .0
а также .2
из 22 бит и пропущены.
Если вы хотите, чтобы ваша арифметика была лучше, используйте double
или же BigDecimal
вместо float
:
double result = 5042034.0d + 1425837.2d;
BigDecimal bd = BigDecimal.valueOf(5042034.0d + 1425837.2d);
Для поддержки ответа @xenteros используйте BigDecimal
,
BigDecimal abc = BigDecimal.valueOf(5042034.0 + 1425837.2);
System.out.println(abc);
приведет к 6467871.2
,
Еще лучше, используйте double
который является примитивным:
double abc = (double) (5042034.0 + 1425837.2);
System.out.println(abc);
NB: Просто подумал внести свой вклад, я знаю, что ОП спросил с помощью поплавка.