2013-06-20 33 views
-1

請注意,我驚訝與下面的問題,我有兩個值分爲TextBox T1和T2。我劃分相同的金額,而不是確切的金額。而不是獲得金額分數00000001Javascript分隔器問題

Example: 
var t1=5623.52; 
var t2=56.2352; 
var t3=5623.52/56.2352; //100.0000000001 

注:我不能圍捕的值,因爲瓦萊斯是匯率因此按照貨幣而有所不同。

+3

那麼,有什麼問題? – Prinzhorn

+0

你想得到確切的金額? – karthi

+0

浮點數,它們是如何工作的? – alex

回答

1

這是由於浮點值的精度有限造成的。有關完整的詳細信息,請參見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,瞭解如何去做到這一點。

+0

感謝您的解決方案,但正如Cheat表所示,parseFloat()不會返回所需的值100.相反,我們無法使用toPrecision()或toFixed()來四捨五入浮點數。 – Sravan

0

就像Felix Kling說的,不要使用浮點值。 如果你想保留一個整數,或者使用parseInt。

var t1=5623.52; 
var t2=56.2352; 
var t3=parseInt(t1/t2);