Java中如何判断两个浮点数是否相等

您所在的位置:网站首页 java判断两个整数是否相等 Java中如何判断两个浮点数是否相等

Java中如何判断两个浮点数是否相等

2023-11-22 20:21| 来源: 网络整理| 查看: 265

一:结论:获取两个浮点数差值的绝对值,然后在某个精度范围内判断。 二:Why?

因为java底层存储浮点数类型的数据:是获取到一个接近这个浮点数的近似值进行存储的。 如下代码展示: 1.假设 8.1 / 3 = 2.7,然后将 2.7 赋值给变量 b。显然想法是错误的。 2.java底层并不是拿 8.1 / 3 的。而是拿着一个接近 8.1 的数值,进行计算。 8.1 有可能在底层是 8.000000091.

double b = 8.1 / 3; System.out.println(b); // 2.6999999999999997 三:错误示范 double a = 2.7; /** * 因为计算机存储的小数都是近似值,带有精度的。 * 比如这里:我们看到的是 8.1 这个数,但是计算机在存储 8.1这个数的时候,要考虑到精度, * 所以有可能存储在底层的 8.1 这个数就是接近 8.1 这个数的值。比如:8.100000002 * 那么计算机在拿 8.100000002 / 3 的时候,也就会出现像程序运行结果一样的数。 */ double b = 8.1 / 3; System.out.println(a); // 2.7 System.out.println(b); // 2.6999999999999997 /** * 出于 浮点数在计算机底层存储的有可能不是我们肉眼所看到的这个数 的细节: * 所以我们在判断浮点数是否相等的时候,不能直接判断这两个数是否相等 * (也就是不能在程序中使用 == 进行浮点数的判断) */ // 这样的比较方式是错误的。 if (a == b) { System.out.println("相等"); } else { System.out.println("不相等"); } 四:正确示范 /** * 那如何比较两个浮点数是否相等呢? * 1.先获取到 2 个浮点数的差值 * 2.然后对这个 差值 取绝对值 * 3.最后根据给出的范围判断这两个数是否相等.(在本次测试中,这个范围是随便给出来的!) * */ double a = 2.7; double b = 8.1 / 3; System.out.println(a - b); // 4.440892098500626E-16(科学计数法:也就是这个数 / 10的16次方,小数点向左移动16位) if (Math.abs(a - b)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3