2013-05-08 6 views
0

Я хочу, чтобы получить указанный номер формата .. помочь мне плз ..потолок десятичном формате в JavaScript

Я сделал функцию

function ceilingAbsolute(inVal, pos){ 

     var digits = Math.pow(10, pos); 

     var num = 0; 

     var patten = "[0-9]{"+pos+"}$"; 
     var re = new RegExp(patten, ""); 

     num = inVal.replace(re); 

     num = num * digits; 

     return num; 
} 



var testVal = ceilingAbsolute(255555, 3) ; 

Я ожидал testVal = 255000, но получил «255undefined» ..

Я хочу, чтобы получить номер потолок deciaml ..

кто помогите пожалуйста ..

+0

Почему регулярное выражение здесь, Ну почему? – elclanrs

+0

TypeError: Объект 255555 не имеет метода «replace». – maerics

+0

Вы выбрали '3' для примера длиной в 6 цифр, я предполагаю, что для' ceilingAbsolute (255555, 2) 'вы ожидаете' 255500'. –

ответ

0

Вы также можете сделать:

function absFloor(num, pos) { 
    num += ''; 
    var len = num.length; 
    if (pos < len) { 
    return num.substring(0,len-pos) + ('' + Math.pow(10, pos)).substring(1); 
    } 
} 

Это может быть сведено к двум линиям, но я думаю, что тест очень важен:

function absFloor(num, pos) { 
    num += ''; 
    return num.substring(0,num.length-pos) + ('' + Math.pow(10, pos)).substring(1); 
} 
+0

Это тоже очень хорошая идея! большое спасибо!! – WhoAmI

6

Причина, по которой вы получаете 255undefined, заключается в том, что вы не передаете заменяющее значение функции replace вместе с регулярным выражением. Почему бы не просто сделать:

function ceilingAbsolute(inVal, pos){ 
    var digits = Math.pow(10, pos); 
    return parseInt(inVal/digits) * digits; 
} 
+0

Если вы используете 'Math.pow (10, pos)' дважды, вы можете также кэшировать его. –

+0

WOW .. вы очень FFast !! – WhoAmI

+0

Хорошая точка Paul S. –

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