密钥事件中的千位和小数分开

时间:2018-02-14 15:59:23

标签: javascript string numbers keyup

我在密钥启动事件中使用下面的代码将千位和十进制分开。但输入15位数值后得到0.这将是什么原因?

<script>
var myinput = document.getElementById('myinput');

myinput.addEventListener('keyup', function() {
  var val = this.value;
  val = val.replace(/[^0-9\.]/g,'');
  
  if(val != "") {
    valArr = val.split('.');
    valArr[0] = (parseInt(valArr[0],10)).toLocaleString();
    val = valArr.join('.');
  }
  
  this.value = val;
});

</script>
<input id="myinput" type="text'>

1 个答案:

答案 0 :(得分:1)

<强>问题:

此处的问题是,当Number尝试解析输入parseInt()值时,您已达到string的最大可能值,请查看Number.MAX_SAFE_INTEGER MDN Reference以获取更多详细信息

因此,当数字超过Number.MAX_SAFE_INTEGER时,您输入的所有额外数字将被忽略并转换为0.请检查Working with large integers in JavaScript tutorial以获取更多说明和示例。

因此,您无法在Javsacript中将number值视为Number,因为有最大可能值限制,您需要将其视为{{1} },所以它可以超过这个最大值string

<强>解决方案:

此处的解决方案是将此value视为number并使用stringRegex方法更改其格式。

我之前写过的a solution以及我用来格式化数字的Fiddle,它将解决您的问题:

.replace()

<强>演示:

这是一个有效的{{3}}原始代码。