Java的“==”运算符双精度

前端之家收集整理的这篇文章主要介绍了Java的“==”运算符双精度前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
方法返回’true’.为什么
public static boolean f() {
   double val = Double.MAX_VALUE/10;
   double save = val;
   for (int i = 1; i < 1000; i++) {
       val -= i;
   }
   return (val == save);
}

解决方法

你从一个巨大的价值中减去相当小的一个值(小于1000).小值远小于理论结果最接近的可表示值仍然是原始值的大值.

基本上这是浮点数工作方式的结果.

想象一下,我们有一些十进制浮点类型(仅为了简单起见),它只在尾数中存储5个有效数字,并且范围为0到1000.

你的例子就像写10999 – 1000 …想想当四舍五入到5个有效数字时的结果.是的,确切的结果是99999 ….. 9000(999位数),但如果只能表示5位有效数字的值,最接近的结果是10999.

猜你在找的Java相关文章