请注意,我对以下问题感到很惊讶,我有两个值要分为TextBox T1和T2。我正在划分相同以获得金额而不是获得确切金额。而不是获得分数00000001中的金额。
Example:
var t1=5623.52;
var t2=56.2352;
var t3=5623.52/56.2352; //100.0000000001
注意:我无法对价值进行舍入,因为价格是汇率,因此根据货币而有所不同。
答案 0 :(得分:1)
这是由浮点值的精度有限引起的。有关详细信息,请参阅The Floating Point Guide。
简短版本是您的数字的0.52
小数部分无法用二进制表示,就像1/3
无法用十进制精确表示一样。由于精度的位数有限,较大的数字比较小的数字略精确,因此不是100倍。
如果这没有意义,假设你正在处理三分之一,并假装数字表示为小数,则为十位小数。如果您声明:
var t1 = 1000.0 / 3.0;
var t2 = 10.0 / 3.0;
然后t2
表示为3.3333333333
,它与用给定精度表示的一样接近。比t2
大100倍的东西是333.3333333300
,但t1
实际上表示为333.3333333333
。它是不正好是t2
的100倍,因为在不同的点上针对不同的数字应用了舍入/截断。
与浮点舍入问题一样,修复方法是使用十进制类型。请查看上述指南中的Javascript cheat-sheet,了解如何解决此问题。
答案 1 :(得分:0)
var t1=5623.52;
var t2=56.2352;
var t3=parseInt(t1/t2);