最近在项目中遇到了一个问题,就是通过 JavaScript 把几个数值型字符串相加求和,得到结果之后与另一个数值型字符串进行比较,最后得到的比较结果数据却与实际结果不符。
例如下面这几个数值型字符串相加,并与另一个数值型字符串比较:
<script type="text/javascript">
// a 的值为 5.75842099999999999
var a = Number("3.6302") + Number("0.3") + Number("0.7309") + Number("0.424921") + Number("0.1724") + Number("0.5");
var b = Number("5.758421");
alert(a == b);
</script>
上面的比较结果为 False,主要原因可以通过上面的 a 数据看出来,所以要得到正确的结果数据,需要对求得结果进行保留小数位数,通过 toFixed 函数可以实现这样的功能,最终求和函数如下:
<script type="text/javascript">
function ToFixed(digit) {
var v = 0;
var length = arguments.length;
if (length > 1) {
for (var index = 1; index < length; index++) {
v += Number(arguments[index]);
}
}
return Number(v.toFixed(digit));
}
</script>
参数 digit 表示小数保留位数,把上面的求和函数通过 ToFixed 来重新实现,最终比较结果与实际值相符,代码如下:
<script type="text/javascript">
var a = ToFixed(6, "3.6302", "0.3", "0.7309", "0.424921", "0.1724", "0.5");
var b = ToFixed(6, "5.758421");
alert(a == b);
</script>