mat*_*son 5 javascript math parsefloat
当我拉出我想要乘以的值时,它们就是字符串.所以我拉它们,将它们解析为浮点数(以保留小数位),然后将它们相乘.
LineTaxRate = parseFloat(myRate) * parseFloat(myQuantity) * parseFloat(myTaxRateRound);
Run Code Online (Sandbox Code Playgroud)
这对99%的发票有效,但我发现了一个非常奇怪的问题.
当它乘以:78*7*0.0725
Javascript返回:39.584999999999994
当你通常在计算器中进行数学运算时:39.585
完成所有操作后,我会使用.toFixed(2)获取该数字并将其四舍五入.
因为Javascript正在返回该数字,所以它没有四舍五入到所需的值:$ 39.59
我尝试了Math.round()总数,但我仍然得到相同的数字.
我想过将数字四舍五入到小数点后三位,但这对我来说似乎很笨拙.
我到处搜索,我看到的是人们提到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>
Run Code Online (Sandbox Code Playgroud)
浮点数以二进制而不是十进制表示。某些十进制数字将无法精确表示。不幸的是,由于Javascript只具有一个Number类,因此它并不是一项很好的工具。其他语言也有设计得体的十进制库来避免这种错误。您将不得不接受一个美分的错误,在服务器端实现一个解决方案,或者非常努力地解决此问题。
编辑:哦!您可以执行78 * 7 * 725,然后除以10000,或者更精确地说,只要将小数点放在正确的位置即可。基本上将税率表示为一小部分。不太方便,但可能会解决您的乘法错误。