2013-09-27 9 views
3

我在這裏有一個小提琴:http://jsfiddle.net/94wQJ/1/ - 但可能有人可以建議只是看下面。JavaScript減法數字不準確 - 爲什麼

<button type="button" id="allocate">Calc</button> 

$('#allocate').click(function() { 
    val1 = 25.00; 
    val2 = 16.37; 
    val3 = val1-val2; 
    alert(val3); 
}); 

25 - 16.37 = 8.63 - 然而,VAL3警報= 8.62999999999

爲什麼它不準確?

謝謝

馬克

+1

這裏有一些很好的信息http://stackoverflow.com/questions/588004/is-javascripts-floating-point-math-broken –

+0

詳細討論這裏http://stackoverflow.com/questions/11832914/round-up-到2小數的位置在JavaScript和這裏http://stackoverflow.com/questions/7342957/how-do-you-round-to-1-decimal-place-in-javascript – hima

回答

5

嘗試使用toFixedinformation here

val3.toFixed(2) 

演示Fiddle

+0

謝謝你拉姆,我只要SO允許,就會標記爲答案。奇怪的行爲!乾杯,馬克 – Mark

+0

@MarkTait不客氣 – Greenhorn

+1

@MarkTait - 這不是奇怪的行爲 - 這是由於浮點數的限制(已知) –

1

許多小數不完全以二進制來表示。

使用.toFixed(2)

1

請檢查該

VAL3 = Math.round(VAL3 * 100)/ 100;

I have update here http://jsfiddle.net/94wQJ/7/

3

爲什麼它不準確?

這是Is floating point math broken?重複,但回答您的具體問題:浮點數通常數量存儲在基地2,因爲它允許比使用基地10更準確地存儲更多的數字,在不能夠犧牲即使只有少量小數位,也能精確存儲所有基數爲10的數字。

+0

它不只是Javascript的浮點數學 - 它是一般的浮點數學,除非你使用像專門的小數類。 – sevenseacat

+0

@sevenseacat:是的,同意了。你可以進一步說,這是一個限制,你可以存儲在一個特定的位數多少信息,我不能引用哪一點的信息理論將適用於此。 – Douglas

相關問題