2013-10-11 86 views
2

我想將數字四捨五入到前兩位數字。JavaScript的前兩位數字的整數?

14300 -> 15000 
1430 -> 1500 
143 -> 150 
14 -> 14 

我想通了這麼多:

var n = 14300; 
n = parseFloat(Math.ceil(n).toPrecision(2)); 
console.log(n); 

它返回14000,但我想圓起來。 Math.ceil僅適用於下一個整數。 http://jsfiddle.net/cruTY/

注:我知道我可以把n使它成爲一個小數,但我想這個功能爲所有的數字工作,而無需手動插入/1000/1000000

回答

5

在這裏你去:

var n = 14300; 
if (String(n).length > 2) { 
    var d = Math.pow(10, String(n).length-2); 
    n = Math.ceil(n/d)*d; 
} 
console.log(n); 

什麼,如果你String(n).length < 2要求?

或者,

var n = 143; 
var l = String(n).length; 
if (l > 2) { 
    var p = Number(String(n).slice(0,3))/10; 
    n = Math.ceil(p) + ''; 
    while(n.length < l) { 
    n += '0'; 
    } 
    n = Number(n); 
} 
console.log(n); 
+1

不圍捕像OP希望,只用兩個數字結束。你的例子結束了14,而不是15000. – jfriend00

+0

錯過了,編輯答案。 – leesei

+0

對不起,我是afk,它似乎工作,謝謝!對任何觀衆來說,這是做到這一點的正確方法嗎? –

1

我只能想到這個

var n = 14300; 
var N = n + ""; 
console.log(N.length > 2 ? (parseInt(N.substr(0, 2)) + 1) * (Math.pow(10, N.length - 2)) : n); 

輸出

15000 
1

這其中並不需要特殊處理的n個< 10:

function roundUpToPrecision(n, d) { 
    var round = n.toPrecision(d); 

    if(round === n.toString()) { 
     return n; 
    } 

    return +(n + 0.5 * Math.pow(10, Math.floor(Math.log(n) * Math.LOG10E) - 1)).toPrecision(d); 
} 
+0

+1這太複雜了,但它也適用於小數! :○。我也是這樣你需要parseFloat()返回。 –

0

我的答案比其他答案更普遍,因爲您可以輕鬆地更改值。此功能將ceil任意索引您需要的數字。如果其第三或第二,只是改變到相應的號碼:

function ceil(num, ind){ 
 
    let str = Math.floor(num)+"", 
 
     arr = new Array(str.length).fill("0"); 
 
     arr[ind - 1] = "1"; 
 
    let divider = arr.join(""); 
 
    
 
    return Math.ceil(num/divider) * divider; 
 
} 
 

 
let number = 14300, //which number to be ceiled 
 
    dig = 2; //to which index we ceil 
 

 
document.body.textContent = ceil(number, dig);

相關問題