請注意,我驚訝與下面的問題,我有兩個值分爲TextBox T1和T2。我劃分相同的金額,而不是確切的金額。而不是獲得金額分數00000001Javascript分隔器問題
Example:
var t1=5623.52;
var t2=56.2352;
var t3=5623.52/56.2352; //100.0000000001
注:我不能圍捕的值,因爲瓦萊斯是匯率因此按照貨幣而有所不同。
請注意,我驚訝與下面的問題,我有兩個值分爲TextBox T1和T2。我劃分相同的金額,而不是確切的金額。而不是獲得金額分數00000001Javascript分隔器問題
Example:
var t1=5623.52;
var t2=56.2352;
var t3=5623.52/56.2352; //100.0000000001
注:我不能圍捕的值,因爲瓦萊斯是匯率因此按照貨幣而有所不同。
這是由於浮點值的精度有限造成的。有關完整的詳細信息,請參見The Floating Point Guide。
簡短版本是0.52
數字的小數部分不能完全用二進制表示,就像1/3
不能完全用十進制表示。由於準確度數字有限,較大的數字比較小的數字稍微精確一些,所以不是100倍。
如果這沒有意義,想象你是處理三分之一,並假裝數字表示爲小數,小數點後10位。如果你聲明:
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,瞭解如何去做到這一點。
感謝您的解決方案,但正如Cheat表所示,parseFloat()不會返回所需的值100.相反,我們無法使用toPrecision()或toFixed()來四捨五入浮點數。 – Sravan
就像Felix Kling說的,不要使用浮點值。 如果你想保留一個整數,或者使用parseInt。
var t1=5623.52;
var t2=56.2352;
var t3=parseInt(t1/t2);
那麼,有什麼問題? – Prinzhorn
你想得到確切的金額? – karthi
浮點數,它們是如何工作的? – alex