最近做一个报价计算器。
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));