我在密钥启动事件中使用下面的代码将千位和十进制分开。但输入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'>
答案 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
并使用string
和Regex
方法更改其格式。
我之前写过的a solution以及我用来格式化数字的Fiddle,它将解决您的问题:
.replace()
<强>演示:强>
这是一个有效的{{3}}原始代码。