2016-04-29 78 views
0

我在JS中製作了一個litte計算器,計算時有一個奇怪的錯誤。如何修復JavaScript浮點計算?

例如,如果我計算10/3,則輸出爲3.3333333333333335。這顯然應3.3333333333333332

下面是代碼

function compute(a, operation, b) { 
var x = parseFloat(a); 
var y = parseFloat(b); 

switch(operation) { 
    case "+": 
     return x + y; 
     break; 
    case "-": 
     return x - y; 
     break; 
    case "*": 
     return x * y 
     break; 
    case "/": 
     return x/y 
     break; 
    default: 
     return Number.NaN; 
} 
} 

當我打電話console.log(compute(10, "/", 3));,我得到這個輸出。

我在SO上發現了一些東西,但是round,toFixed()和東西並沒有爲我做出訣竅。提前致謝。

+2

浮點數不是準確的數字。那麼爲什麼你認爲它應該顯然是** 3.3333333333333332而不是'3.3333333333333335'? –

+2

你爲什麼期望它是'3.3333333333333332'?爲什麼不''3.3333333333333333'? – Cristy

+0

「3.3333333333333335」之後的下一個較小的數字表示爲雙精度浮點,大約爲「3.3333333333333330」。 –

回答

1

嘗試使用精度。

var a = 10/3; 
parseFloat(a).toPrecision(12) 
+0

這給我3.33333333333而不是3.3333333333333332 –

+0

但正確的是3.3333333〜 – fdfey

+0

@LucaSalzani:爲什麼它應該是'3.3333333333333332'? – Cerbrus