0

在下面的代碼段中,浮點錯誤是由相乘,並通過10在哪些情況下乘法和除法不能解決浮點錯誤?

除以沒有一個解決了乘法和除法z的值出來作爲0.30000000000000004代替0.3

的方法「似乎」是不理想:

  • 它對於每一個數字計算額外的開銷。
  • 額外的計算會導致額外的CPU消耗。

var x = 0.1; 
 
var y = 0.2; 
 
var z = (x * 10 + y * 10)/10; 
 
document.getElementById("demo").innerHTML = z;
<p id="demo"></p>

問題:

  • 能否開發商盲目地用這個地方浮動點使用的所有情況?
  • 有沒有這種情況下,這種乘法和除法方法不會解決浮動錯誤?
+2

那如何解決任何問題?無論如何,你究竟想要解決什麼問題? – Amit

+1

您將不得不接受浮點有四捨五入錯誤。你得到正確*輸出的事實並不意味着很多,你仍然有四捨五入的錯誤,但是它們太小而不顯示。你很幸運。 –

+0

@RudyVelthuis是'.toFixed'與'parseFloat'最好的[解決](http://stackoverflow.com/questions/34390608/in-which-cases-multiply-and-divide-will-not-solve-floating - 點 - 錯誤?noredirect = 1#comment56522886_34390697)? – xameeramir

回答

1

爲什麼不使用.toFixedparseFloat以及一些精度。

var x = 0.1; 
 
var y = 0.2; 
 

 
function add(foo, bar, precision){ 
 
    return parseFloat((foo + bar).toFixed(precision)); 
 
} 
 

 
var sum = add(x, y, 1); 
 
alert(sum);

+0

這看起來很完美,最少的代碼。有關它如何消耗CPU **的任何建議?我可以安全地將它用於**所有**浮點使用嗎? – xameeramir

+0

我想說的是,在這兩種情況下,CPU利用率幾乎相同,但這樣做會更加精確和準確。 – void

+0

並且它可以全局用於所有浮點事例嗎? – xameeramir