You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中double变量为何同时等于两个不同的数值?

双精度浮点数(double)看似匹配两个不同值的原因

这是IEEE 754双精度浮点数的精度限制导致的正常现象,具体原因如下:

  • double类型采用64位二进制存储,按照IEEE 754标准的划分,仅能保留约15~17位十进制有效数字,超出这个范围的整数无法被精确存储。
  • 你输入的12345678901234567是17位十进制整数,已经触及double的有效精度上限,无法被完整保留,会被自动舍入到距离它最近的、可被double精确表示的数值,也就是你打印得到的12345678901234568.0。
  • 12345678901234567.0和12345678901234568.0这两个字面量在转换为double类型时,都会被舍入到同一个精确值12345678901234568.0,所以两次==比较的结果都为true,最终逻辑与运算的结果就是true。

如果需要精确存储大整数或高精度小数,避免出现精度丢失问题,不要使用float或double类型,改用Java内置的java.math.BigInteger(处理大整数)或java.math.BigDecimal(处理高精度小数)即可。

内容的提问来源于stack exchange,提问作者Bas Nijhof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:45:02