我试图创建一个文本字段,这样如果有一个数字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
});
答案 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