2011-08-23 62 views
3

可能重複:
Elegant workaround for JavaScript floating point number problemJavaScript的加成產生怪異的小數問題

爲什麼是它使用JavaScript將2號在一起的時候,它會返回小數點的瘋狂多少?

如果我在紙上添加285.72 + 142.86它等於428.58,那麼您可以通過計算器得到相同的答案。

但是,如果我再補充一點數量從2個文本框返回428.58000000000004

Example

我需要我的javascript返回428.58。我知道我可以使用.toFixed(),但我不喜歡,因爲我不明白爲什麼將兩個數字加在一起會在小數點後創建如此瘋狂的地方。

+0

啊,好醇」浮點運算。 – Pat

+0

謝謝Marc B,找不到其他帖子,這指出我的方向是正確的。有關這篇文章的鏈接http://floating-point-gui.de/basic/,我已經忘記了來自學校的浮點主題。 – Mark

回答

4

並非所有的數字可以精確地用浮點來repesented。大約是做出來的,並且當你對一個非正確的數字進行手術後,情況會變得更糟。

例子請參閱此維基百科條目: http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

如果你改變了你的除了輸入的東西,可以完全按浮點來表示(如1/8),它會工作。試試數字:285.125和142.125。

微軟.NET也有類似的行爲:

float x = 285.72f 

float y = 142.86f 

float z = x + y 

結果: Z = 428.580017

+0

好點,這不是一個JS唯一的問題。 –

3

您必須使用.toFixed,因爲Javascript使用IEEE 754-2008浮點算術會導致此行爲。這些二進制浮點數只是近似值,所以你必須使用舍入。

2

這是因爲浮點數不使用某些十進制數的精確表示,因此可能會產生算術不精確。我不知道有什麼更好的方法,除了中取整到自己需要的任何精確的數字,比如toFixed確實

http://www.mredkj.com/javascript/nfbasic2.html