限制十进制数后的数字,如果一个数字加0

时间:2014-04-18 16:23:07

标签: javascript jquery

我试图创建一个文本字段,这样如果有一个数字153.254,则变为153.25。如果该字段包含154.2,则添加额外的0以填充小数点后的两个点; 154.20。

toFixed()效果很好,但我不想要数字四舍五入。还遇到了其他解决方案,如果我在1.40中输入,那么如果我在1之后将光标移回,我就无法输入任何内容,除非我清除该字段并重新开始。

是否有一种简单的jQuery方法可以限制小数点后的两个字符,然后如果小数点后只有一个字符,添加一个零来填充两个字符的限制? (该字段可能从数据库中获得价值,这就是为什么需要第二部分的原因)

解决方案更新:对于那些感兴趣的人,我把它放在一起以实现我想要的(感谢下面的答案以及stackoverflow上的其他问题)

           $('.number').each(function(){
                         this.value = parseFloat(this.value).toFixed(3).slice(0, -1);
                    });
           $('.number').keyup(function(){
                        if($(this).val().indexOf('.')!=-1){         
                            if($(this).val().split(".")[1].length > 2){                
                                if( isNaN( parseFloat( this.value ) ) ) return;
                                this.value = parseFloat(this.value).toFixed(3).slice(0, -1);

                            }  
                         }            
                         return this; //for chaining
                    });

3 个答案:

答案 0 :(得分:6)

你可以做myNumber.toFixed(3).slice(0, -1)

答案 1 :(得分:2)

试试这个:

var num = 153.2

function wacky_round(number, places) {
    var h = number.toFixed(2);

    var r = number.toFixed(4) * 100;
    var r2 = Math.floor(r);
    var r3 = r2 / 100;
    var r4 = r3.toFixed(2);

    var hDiff = number - h;
    var r4Diff = number - r3;
    var obj = {};
    obj[hDiff] = h;
    obj[r4Diff] = r4;
    if (r4Diff < 0) {
        return h;
    }
    if (hDiff < 0) {
        return r4;
    }
    var ret = Math.min(hDiff, r4Diff);

    return obj[ret];
}

alert(wacky_round(num, 2))

答案 2 :(得分:1)

怎么样

function doStuff(num){
    var n = Math.floor(num * 100) / 100,
        s = n.toString();

    // if it's one decimal place, add a trailing zero:
    return s.split('.')[1].length === 1 ? (s + '0') : n;
}

console.log(doStuff(1.1), doStuff(1.111)); // 1.10, 1.11

http://jsfiddle.net/NYnS8/