首页 > js计算的奇怪问题?

js计算的奇怪问题?

最近做一个报价计算器。

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

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

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

求高手指点。


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


简单方案:

result = 1.08*area*1053;

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

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

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

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


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

Number(result).toFixed(2)

浮点运算会有精度损失,

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