2011-04-04 117 views
5

我需要使用javascript將十進制值舍入到小數位。使用javascript捨去十進制數

防爆,:

16.181 to 16.18 
16.184 to 16.18 
16.185 to 16.19 
16.187 to 16.19 

我已經找到了一些答案,但大多不四捨五入16.185到16.19 ..

+0

@mplungjan,我不要求Math.round之間」的區別(0)和toFixed( 0)」。如果你看過我的問題,你可以理解我在16.185到16.19之間的問題。 – Prasad 2011-04-04 07:12:12

+0

我真的很驚訝地發現,JavaScript在FF/Chrome中說'16.185 * 100' ='1618.4999999999998',IE中是'1618.5'。很奇怪。 – 2011-04-04 07:12:47

+0

你是對的。我的錯誤 - 但必須是重複的東西;) – mplungjan 2011-04-04 08:21:21

回答

13
(Math.round((16.185*Math.pow(10,2)).toFixed(1))/Math.pow(10,2)).toFixed(2); 

如果你的價值,例如16.199正常回合將回到16.2 ...但用這種方法你會得到最後也是0,所以你看到16.20!但請記住,該值將以字符串形式返回。如果你想用它進行進一步的操作,你必須parsefloat吧:)

現在的功能:

function trueRound(value, digits){ 
    return (Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits); 
} 
+0

編輯好的代碼按照需要工作... – ayk 2011-04-04 07:17:12

+0

這很有用。如果你改變它看起來像函數,它可能對與我有同樣問題的人有用。函數formatNumber(myNum,numOfDec){Math.round((myNum * Math.pow(10,numOfDec))。toFixed(1))/ Math.pow(10,numOfDec))toFixed(numOfDec); } – Prasad 2011-04-04 07:30:54

+0

添加功能發佈;) – ayk 2011-04-04 07:34:17

0

[編輯] 此代碼不會爲工作值等18.185,如18.185 * Math.pow(10,2)被評價爲1818.4999999999997

Math.round(<value> * Math.pow(10,<no_of_decimal_places>))/Math.pow(10,<no_of_decimal_places>) ; 

例如: 1234.5678 - > 2位小數 - > 1234.57

Math.round(1234.5678 * Math.pow(10,2))/Math.pow(10,2) ; 
+0

我寫了10^而不是Math.pow(10 ,) - >修正它 – 2011-04-04 07:04:08

+0

這也是行不通的。它以16.18爲16.185。我需要圍繞它作爲16.19 – Prasad 2011-04-04 07:05:29

+0

@Prasad:嗯,你是對的...奇怪 – 2011-04-04 07:11:15

0
function formatNumber(myNum, numOfDec) { 
     var dec = Math.pow(10, numOfDec); 
     return Math.round(myNum * dec + 0.1)/dec; 
} 
+0

這不起作用。它以16.18爲16.185。我需要把它作爲16.19。 – Prasad 2011-04-04 07:03:53

+0

嗯..我看到)這是問題 – 2011-04-04 07:06:26

+0

你知道,你可以這樣做,爲你的值增加額外的0.1,以防止有5個值的情況:'返回Math.round(myNum * dec + 0.1)/ dec; ' – 2011-04-04 07:10:06

0

您正在使用四捨五入的代碼是正確的。但爲了獲得理想的結果,請從代碼中刪除.toFixed(numOfDec)。

功能:

功能formatNumber(myNum的,numOfDec){

var decimal = 1 
    for (i = 1; i <= numOfDec; i++) 
     decimal = decimal * 10 //The value of decimal determines the number of decimals to be rounded off with (.5) up rule 
    var myFormattedNum = Math.round(myNum * decimal)/decimal 
    return (myFormattedNum) 
} 

希望它可以幫助你以某種方式:)

+0

我已經試過,並得到同樣的問題。它不是四捨五入16.185至16.19 – Prasad 2011-04-04 07:14:40

+0

@ Prasad嘗試我的解決方案,它會導致你需要的! – ayk 2011-04-04 07:16:40

0
parseFloat(myNum.toFixed(numOfDec)) 
2

感謝@ayk的回答,我將您的功能修改爲:

function trueRound(value, digits){ 
    return ((Math.round((value*Math.pow(10,digits)).toFixed(digits-1))/Math.pow(10,digits)).toFixed(digits)) * 1; 
} 

,只需加上「* 1」 因爲你們的,你寫的,16.2成爲16.20 我也不在後面需要的零。

1

使用 -

Decimal ds=new Decimal(##.##); 
String value=ds.format(inputnumber); 

這將在我的情況很好地工作,希望它會工作100%