2016-11-28 87 views
-3

有沒有辦法將數字舍入到小數點後2位i javascript。使用Javascript循環到最少2位小數和最多4位小數

實施例:

  1. 10 - > 10.00
  2. 20.10 - > 20.10
  3. 30.1234 - > 30.1234
  4. 40.123456 - > 40.1235
  5. 50.1200 - > 50.12
  6. 60.123 - > 60.123

等等......所以輪到分鐘2小數。我可以爲此使用jquery。

+4

將40.123456'四捨五入爲40.1235的規則是什麼? ('10'到'10.00'甚至不是四捨五入的。) –

+0

對不起,關鍵是舍入到小數點後2位(如果沒有小數,就像格式化數字)並且最大爲4位小數。 – Sensei

+0

那麼是什麼決定'40.123456'變成'「40.1235」'而10'是'「10.00」'而不是'「10.000」'或'「10.0000」')? 「123.456」是「123.456」還是「123.46」或「123.4560」? (我使用引號是因爲我們*在說這裏的演示文稿,對嗎?不是數值?) –

回答

2

聽起來喜歡你」重複說你想把數字轉換成至少有兩位小數的字符串(即使它們是零),如果需要的話最多四個(它們不是零)。如果是這樣的話:

對於所有的現代瀏覽器:See Marek's answer

如果你不能依靠Intl:我能想到的唯一的事情就是用toFixed(4)然後取出最多兩個尾隨零:

function format(num) { 
 
    var str = num.toFixed(4); 
 
    return str.replace(/0{1,2}$/, ''); 
 
} 
 
function test(test) { 
 
    var result = format(test.num); 
 
    console.log(
 
    test.num, 
 
    "=>", 
 
    result, 
 
    result == test.result ? "- Pass" : "- Fail" 
 
); 
 
} 
 

 
[ 
 
    {num: 10, result: "10.00"}, 
 
    {num: 20.10, result: "20.10"}, 
 
    {num: 30.1234, result: "30.1234"}, 
 
    {num: 40.123456, result: "40.1235"}, 
 
    {num: 50.1200, result: "50.12"}, 
 
    {num: 60.123, result: "60.123"} 
 
].forEach(test);

+0

感謝您的及時響應!我會馬上測試它。 – Sensei

+0

這就是我所需要的,我剛剛用更精確的四捨五入取代了num.toFixed(4): 'var roundedNum = +(Math.round(num +「e + 4」)+「e-4」); var numTo4 = roundedNum.toFixed(4);' – Sensei

+0

而這畢竟不是那麼糟糕的問題? – Sensei

1

看一看的toFixed()JavaScript函數:here

它留下的是一個字符串,雖然這可能取決於導致問題,你在做什麼

+0

如果字符串返回是一個問題,您可以隨時將其包裝在parseFloat中。 – MCMXCII

+0

字符串不是問題,使用parseFloat感謝您的建議 – Sensei

4

如果你不受限於過時的瀏覽器,我建議這個智能功能:

var fmtr = new Intl.NumberFormat('us-us', { 
 
    style: 'decimal', 
 
    useGrouping: false, 
 
    minimumFractionDigits: 2, 
 
    maximumFractionDigits: 4 
 
}); 
 

 
function test(test) { 
 
    var result = fmtr.format(test.num); 
 
    console.log(
 
    test.num, 
 
    "=>", 
 
    result, 
 
    result == test.result ? "- Pass" : "- Fail" 
 
); 
 
} 
 

 
[ 
 
    {num: 10, result: "10.00"}, 
 
    {num: 20.10, result: "20.10"}, 
 
    {num: 30.1234, result: "30.1234"}, 
 
    {num: 40.123456, result: "40.1235"}, 
 
    {num: 50.1200, result: "50.12"}, 
 
    {num: 60.123, result: "60.123"} 
 
].forEach(test);

參考文獻:

+2

對我來說,最好的答案在這裏! – Saram

+1

Niiii​​iiiiiiice。我知道402標準,但是,沒有意識到它做了這個*。太棒了。 –

+0

@ T.J.Crowder很大的改進,謝謝! –

相關問題