2013-03-07 222 views
2

我有用四捨五入或四捨五入的javascript的問題。那麼它會完成這項工作,但有些情況下,它無法正確完成工作。在javascript中四捨五入或四捨五入的更好的方法

例如。

價格爲0.30,如果有15%的折扣,結果應該是0.255或0.26。 (這是某種程度上沒關係)

價格是79.99,50%的折扣應該有40個結果。 (實際結果是39.995)

以此爲參考Using toFixed(2) and math round to get correct rounding

也做了這個過程Math.round(value*Math.pow(10,dec))/Math.pow(10,dec);

任何想法試過嗎?

謝謝

這是我的初步測試。雖然這只是一個最初的測試什麼,如果最後兩位數是我沒被選中大於5然後申請Math.ceil將在0.2550.26但使用39.99時,結果仍然是39.99雖然39.99應該使用Math.round從而使結果將是40

我想完成的是如果需要四捨五入或需要四捨五入,可以將任意數字舍入或舍入。

UPDATE

我能解決我自己的問題。 (ATLEAST我的特定環境)

http://jsfiddle.net/xMj3M/4/

+3

我不明白你的問題,你想達到什麼程度的準確性?您首先需要精確到小數點後兩位,第二位是小數點後一位 – 2013-03-07 23:54:28

+0

@Benjamin Gruenbaum:在這兩種情況下,它都是四捨五入到小數點後兩位 – zerkms 2013-03-07 23:59:06

+0

這應該回答您的問題,精確到小數點後兩位: http://stackoverflow.com/questions/5191088/how-to-round-up-a-number-in-javascript – 2013-03-08 00:05:24

回答

1

你可以嘗試:

var someNumber = 36.7327; 
var someNumberRoundedTo2Decimals = (Math.round((someNumber * 100))/100); 
// = 36.73 

基本上是這樣的移動小數點向右2位數..

3673.27 

然後四捨五入它關閉到一個int

3673 

然後移動小數點回到左邊2個地方

36.73 
+0

這不是OP已經在做什麼,這不工作,並提出了問題? – 2013-03-08 00:22:17

+0

可能(儘管'dec'沒有定義,所以我只能假設OP使用了'2') – scunliffe 2013-03-08 00:33:10

2

這是因爲彩車的處理方式。我建議只用整數表示你的原始數字,所以你應該從7999開始。如果你使用這種方法,你會得到正確的結果。

一般來說,尤其是在處理金錢問題時,首先以便士的方式工作然後以貨幣格式輸出它總是一個好主意。