【发布时间】:2011-11-16 09:58:47
【问题描述】:
当我提取想要相乘的值时,它们是字符串。所以我拉它们,将它们解析为浮点数(以保留小数位),然后将它们相乘。
LineTaxRate = parseFloat(myRate) * parseFloat(myQuantity) * parseFloat(myTaxRateRound);
这对我 99% 的发票都有效,但我发现了一个非常奇怪的问题。
当它相乘时:78 * 7 * 0.0725
Javascript 正在返回:39.584999999999994
当您通常在计算器中进行数学运算时:39.585
当一切都说完了,我取那个数字并使用 .toFixed(2)
将其四舍五入因为 Javascript 正在返回该数字,所以它没有四舍五入到所需的值:$39.59
我尝试了 Math.round() 总数,但仍然得到相同的数字。
我曾想过将数字四舍五入到小数点后 3 位,然后是 2 位,但这对我来说似乎很老套。
我到处搜索,我看到的只是人们提到 parseFloat 失去了它的精度,并且使用 .toFixed,但是在上面的示例中,这没有帮助。
这是我为重现问题而制作的测试脚本:
<script>
var num1 = parseFloat("78");
var num2 = parseFloat("7");
var num3 = parseFloat("0.0725");
var myTotal = num1 * num2 * num3;
var result = Math.round(myTotal*100)/100
alert(myTotal);
alert(myTotal.toFixed(2));
alert(result);
</script>
【问题讨论】:
-
你需要阅读this。
-
@CanSpice - 谢谢,很棒的文章。
标签: javascript math parsefloat