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

Java是否会对IEEE-754表示的浮点数做舍入处理以避免精度误差?

问题原因说明

你对单精度浮点数1.6f和0.4f的独立存储值的认知是正确的,但疏漏了IEEE754浮点数运算的核心规则:两个浮点数做算术运算后,结果会按照默认的舍入模式,舍入到当前类型的有效位范围内,不会保留完整的无限精度计算结果。

具体计算过程

  • 两个float的实际存储值相加的精确结果为:2.0000000298023223876953125
  • float类型仅有23位尾数,对应约7位十进制有效数字,上述精确结果距离2.0f的差值,远小于float精度下2.0f之后下一个可表示的数值(约2.000000119f)
  • 按照IEEE754默认的就近舍入、偶数舍入规则,加法结果会被舍入为精确的2.0f,因此才会出现你观察到的输出结果。

换成double输出不变的原因

即使用double类型计算,1.6和0.4的double存储值相加后的精确结果,舍入到double精度后也正好是2.0,因此输出不会发生变化。

验证方法

你可以在代码中加入如下语句打印sum的真实存储值,验证结果确实为2.0:

System.out.println(new java.math.BigDecimal(sum));

内容的提问来源于stack exchange,提问作者Vaibhav Maheshwari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:45:06