精度浮点数丢失为整数

时间:2018-11-27 04:25:10

标签: java floating-point

int i=187;
float f=Float.MAX_VALUE;

System.out.println((f-i)==(f+i)) ;

此打印为真。为什么打印正确,如何防止精度下降?

1 个答案:

答案 0 :(得分:2)

float范围高端的可表示数字以2 124 的间隔隔开,大约为2.028•10 31 。执行算术运算时,结果将四舍五入到最接近的可表示值。在float.MAX_VALUE上加上187的数学值非常接近float.MAX_VALUE,以至于四舍五入的结果是float.MAX_VALUE

因此float.MAX_VALUE - 187float.MAX_VALUE + 187相等。

无法通过floatdouble类型进行更改;这就是它们的设计方式。如果您想更精确地计算,还有其他解决方案,例如使用任意精度的数学软件或重新设计计算。