2013-10-11 3 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

Не сгонять как ОП хочет, и только заканчивается двумя цифрами. Ваш пример заканчивается 14, а не 15000. – jfriend00

+0

Пропустил это, отредактировал ответ. – leesei

+0

Извините, я был афком, кажется, работает, спасибо! Для любого зрителя это правильный способ сделать это? –

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

Это один не нуждается в специальной обработке для п < 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);

Смежные вопросы