2012-08-02 108 views
0

可能重複:
Is JavaScript's Math broken?奇怪的數學計算

我這裏有一個JavaScript和HTML代碼my code

,我也得到一個奇怪的值時,計算具體領域。現在只有一個複選框有一個腳本(背景音樂插件),並且只有當我選擇添加3in卷軸中的任何一個時,我會在總價格中獲得24.990000000000002。它是如此奇怪,它只有這些輸入...它應該只是24.99 ...所有其他投入工作,並給出準確的總數,但只有3 3in領域給這些數字......通過反覆試驗我發現,問題就在這裏

regthreetot = parseFloat(regthree * 50); 
regfourtot = parseFloat(regfour * 100); 
regfivetot = parseFloat(regfive * 200); 
regsixtot = parseFloat(regsix * 300); 
regseventot = parseFloat(regseven * 400); 
supthreetot = parseFloat(supthree * 50); 
supfourtot = parseFloat(supfour * 100); 
supfivetot = parseFloat(supfive * 200); 
supsixtot = parseFloat(supsix * 300); 
supseventot = parseFloat(supseven * 400); 
sixthreetot = parseFloat(sixthree * 50); 
sixfourtot = parseFloat(sixfour * 100); 
sixfivetot = parseFloat(sixfive * 200); 
sixsixtot = parseFloat(sixsix * 300); 
sixseventot = parseFloat(sixseven * 400); 

的regthree,supthree和sixthree值都乘以50 ...所有的其他值乘以一個值與3位...如果我改變50〜100,它會給一個正常答案...爲什麼數字的數量在這裏重要,我能做些什麼來解決它?

+3

有** **必須是一個辦法簡化那段代碼... – elclanrs 2012-08-02 05:50:57

+0

那裏def是...我只是不知道如何...但 – user1556319 2012-08-02 05:51:54

+1

[不要使用花車](http://stackoverflow.com/questions/3730019/why-not -use-double-or-float-to-represent-currency) – Mat 2012-08-02 05:54:13

回答

0

這是因爲float算法的工作原理。你可以通過四捨五入到小數點後兩位(你不會使用分數的分數):http://jsfiddle.net/vSsW9/1/

+0

哇這是驚人的,作品非常感謝你...它很高興有不同的方式來做事情! – user1556319 2012-08-02 05:59:06

+0

哦,如果你再次看到這個我有複選框的另一個問題...所以基本上值保持,如果我不取消選中框(如果我按下清除按鈕複選框的功能不激活)。 ..是否有一個函數來清除某個變量,我可以放在明確的按鈕onclick? – user1556319 2012-08-02 06:08:23

0

那麼,直到你知道了,你可以使用Math.Round四捨五入到兩位小數。假設你得到的變種被稱爲結果,做result=Math.round(result*100)/100

+0

我實際上已經在我的代碼中使用了math.round ......只是不是那部分......但上面的那個人把.toFixed(2)放在了總數的旁邊......是這樣的嗎? – user1556319 2012-08-02 06:01:05

+0

ohh如果你再次看到這個問題,我有複選框的另一個問題...所以基本上值保持,如果我不取消選中框(如果我按下清除按鈕複選框的功能不激活)。 ..是否有一個函數來清除某個變量,我可以放在明確的按鈕onclick? – user1556319 2012-08-02 06:08:30

0

它是由浮動的變量引起的不是100%準確的,將其固定到最多2小數點:

n.toFixed(2)