2013-03-25 45 views
0

請參考下面的代碼。Javascript/jquery complex加法

currentAxis.Range.Start = 1956.9 

    tempInterval = currentAxis.Range.Start 

    currentAxis.Range.Interval = 0.4 

    tempInterval += currentAxis.Range.Interval; 

它將返回的1957.3價值1957.3000000000001代替。我不希望使用toFixed()方法刪除點中的十進制值,因爲有時候間隔值將爲0.0004,那時它將在該點後返回4位數。根據間隔,它會有所不同。

我需要1956.9 +0.4= 1957.3而不使用toFixed()方法。我該如何解決這個問題?

+0

是否[這個問題](http://stackoverflow.com/questions/7342957/how-do-you-round-to-1-decimal-place-in-javascript)可以幫助你嗎? – George 2013-03-25 09:43:57

+0

沒有。如果添加單個數字點值,則輸出也會包含相同的數字。例如,「0.4」是單個數字,因此它將與X一起添加,並在該點之後返回「19.X」單個數字。沒有必要「toFixed(x)或一些計算?爲什麼這個問題發生在javascript – SivaRajini 2013-03-25 09:50:30

+0

浮點標準承擔了大量的舍入誤差... http://stackoverflow.com/questions/588004/is-javascripts-floating-point- math-broken – loxxy 2013-03-25 09:52:38

回答

0

嘗試乘以10,通過固定10

爲十進制&除法使用:

Math.round((1956.9 +0.4)*10)/10   // Output 1957.3 

或簡單地:

(((1956.9 + 0.4)*10)<<0)/10    // Output 1957.3 
+0

i不想執行計算,因爲(1956.9 +0.0004)它會在點後返回4位數字,根據我們要添加的值「X」,它會變化,不需要使用「toFixed(x)計算?我該如何解決這個問題? – SivaRajini 2013-03-25 09:52:57

0

正如已經說過的,這種不確定性是在浮置固有點數,javascript only supports floating point numbers不是整數。但是,如果舍入誤差位於1957.3000000000001區域,並且您關心的最精確的計算結果在1957.0004區域內,那麼您可以通過數百萬計算得出結論,然後再擔心舍入誤差會顯着影響結果。