千和小数在键向上事件中分开



我在键向上事件中使用了以下代码来分隔千和小数。但是输入 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'>

问题:

这里的问题是,当parseInt()尝试解析输入string值时,您达到了Number的最大可能值,请检查Number.MAX_SAFE_INTEGERMDN 参考以获取更多详细信息。

因此,当数字超过 Number.MAX_SAFE_INTEGER 时,您输入的所有额外数字都将被忽略并转换为 0。请查看在JavaScript 中使用大整数教程以获取更多解释和示例。

因此,您不能将较大的number值视为 Javsacript 中的Number,因为存在最大可能值限制,您需要将其视为string,因此它可以超过此最大value

溶液:

此处的解决方案是将此number视为string,并使用Regex.replace()方法来更改其格式。

这是我之前写过的解决方案,我总是用它来格式化数字,它将解决您的问题:

var formatNumber = function(input, fractionSeparator, thousandsSeparator, fractionSize) {
fractionSeparator = fractionSeparator || '.';
thousandsSeparator = thousandsSeparator || ',';
fractionSize = fractionSize || 3;
var output = '',
parts = [];
input = input.toString();
parts = input.split(".");
output = parts[0].replace(/B(?=(d{3})+(?!d))/g, thousandsSeparator).trim();
if (parts.length > 1) {
output += fractionSeparator;
output += parts[1].substring(0, fractionSize);
}
return output;
};

演示:

这是原始代码的工作小提琴

相关内容

  • 没有找到相关文章

最新更新