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

带0-2位小数的浮点数:Number.parseFloat((x+y).toFixed(2))是否恒等于z?

问题解答

加法场景:表达式始终成立

当x、y、z是0-2位小数,且x+y的十进制精确等于z,同时数值在Number.MIN_VALUE到Number.MAX_VALUE范围内时,Number.parseFloat((x+y).toFixed(2)) == z始终成立。

原因在于:0-2位小数的十进制数转换为双精度浮点数时,误差量级仅为1e-16级别,远小于toFixed(2)舍入的最小步长0.005。x+y的浮点计算结果与真实十进制值z的差距极小,toFixed(2)会正确将其舍入到z的两位小数形式,转换为Number后与z完全相等。

减法场景:表达式始终成立

与加法逻辑完全一致:x-y的浮点计算误差同样远小于0.005,toFixed(2)会精准舍入到十进制结果z的两位小数形式,最终转换后与z相等。

乘法场景:表达式始终成立

即使x*y的浮点结果存在精度误差,误差量级仍远小于0.005。toFixed(2)的舍入规则会将结果修正为z的两位小数形式,转换为Number后与z相等。

示例代码:

console.log(0.3 * 0.3); // 输出0.08999999999999999
console.log(Number.parseFloat((0.3*0.3).toFixed(2)) == 0.09); // 输出true

除法场景:表达式始终成立

排除除以0的情况后,x/y的浮点计算误差同样远小于0.005,toFixed(2)会正确舍入到十进制结果z的两位小数形式,转换后与z相等。

示例代码:

console.log(0.06 / 0.2); // 输出0.29999999999999993
console.log(Number.parseFloat((0.06/0.2).toFixed(2)) == 0.3); // 输出true

不存在不成立的情况

所有符合前提条件的场景下,该表达式均成立。因为0-2位小数的数值在双精度浮点数中的精度误差远不足以触发toFixed(2)舍入到错误的两位小数结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:37:54