仅限Javascript数字。如何获得2个固定的小数?

时间:2015-09-10 21:56:11

标签: javascript

我有这个功能只能写数字并且只允许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),而不是拿走最后一个数字。

4 个答案:

答案 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)

这是一个可能的解决方案:

应用解决方案:

  • 将逗号分隔的数字拆分为数组
  • 验证并将最后一个索引值设为2位
  • 将值存储回数组
  • 将数组转换回逗号分隔数

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"));