js计算的奇怪问题?

最近做一个报价计算器。

result = 1053*area*1.08;
console.log(result);

如果area的值是100
那么输入为113724.00000000001

这是什么奇怪的问题呢?
问题1.
如何对计算结果保留2位小数。
问题2:
是什么原因造成了输出的。00000000001?

求高手指点。

阅读 4.2k
5 个回答

浮点运算会有精度损失,

// 用 toFixed 变成字符串,这是肯定保持得住的
// 注意:toFixed 在“四舍五入”这个问题上不同的运行环境有不同的实现
console.log(result.toFixed(2));

问题1:
计算精读丢失问题。因为有些十进制的浮点数不能很好的转化为二进制
问题2:

Number(result).toFixed(2)

1、对计算结果保留两位小数:result.toFixed(2)
2、浮点数在计算机中的存储是不精确的。

这是因为:计算机储存浮点数使用的是二进制

一个十进制的有限小数,转化成二进制后可能会变成无限循环小数

然而,计算机储存能力是有限的,只能储存一定数量的小数位,剩下的将被舎去

于是,就出现了这样的误差

简单方案:

result = 1.08*area*1053;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题