我有这个功能只能写数字并且只允许1个逗号(点自动转换为逗号)。
我需要的数字是2位小数而不是更多。如果此人写12,345
,则必须自动关闭。
这是功能:
function inputControl(input){
if($('.max-value-overflow').is(':visible')){
$('.max-value-overflow').hide();
}
var value = input.val();
var values = value.split("");
var update = "";
var transition = "";
var expression=/(^\d+$)|(^\d+\.\d+$)|[,\.]/;
var finalExpression=/^([0-9][0-9]*[,\.]?\d{0,3})$/;
for(id in values)
{
if (expression.test(values[id])==true && values[id]!='')
{
transition+=''+values[id].replace('.',',');
if(finalExpression.test(transition)==true)
{
update+=''+values[id].replace('.',',');
}
}
}
input.val(update);
}
我尝试将最后一行更改为:
input.val((update).toFixed(2));
但没有奏效。我继续得到全数(12,345),而不是拿走最后一个数字。
答案 0 :(得分:1)
这是因为您的输入是字符串而.toFixed()
仅适用于Numbers。
在使用parseInt()
之前,您应该使用.replace('.',',')
解析它,否则您将再次获得一个String,因为replace()
返回一个String
答案 1 :(得分:0)
update
是一个字符串。尝试强制使用
input.val((+update).toFixed(2));
或与parseInt
一样
input.val(parseInt(update).toFixed(2));
另外,请注意,toFixed
仅适用于带小数的值,而不是逗号,所以
(+'12,345').toFixed(2) => 'NaN'
(+'12.345').toFixed(2) => '12.35'
答案 2 :(得分:0)
知道了。这是正则表达式中的一个错误:
var finalExpression=/^([0-9][0-9]*[,\.]?\d{0,3})$/;
必须:
var finalExpression=/^([0-9][0-9]*[,\.]?\d{0,2})$/;
(注意结束时的数字2而不是3。
答案 3 :(得分:0)
这是一个可能的解决方案:
应用解决方案:
function ConvertTo2Decimal(num)
{
var numArr = num.split(',');
if (numArr.length > 1)
{
var lastIndexValue = numArr[numArr.length - 1];
if (lastIndexValue.length > 2)
{
lastIndexValue = lastIndexValue.substring(0, 2);
numArr[numArr.length - 1] = lastIndexValue;//set the new value
num = numArr.join(",");
}
}
return num;
}
document.write(ConvertTo2Decimal("12,345"));
document.write("<br/>");
document.write(ConvertTo2Decimal("390,512,3455"));