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

Javascript 在向上键事件中,千和小数分开,javascript,string,numbers,keyup,Javascript,String,Numbers,Keyup,我使用了下面的代码,在加键事件中将千和十进制分开。但输入15位数字后,值为0。原因是什么 var myinput=document.getElementById('myinput'); myinput.addEventListener('keyup',function(){ var val=该值; val=val.replace(/[^0-9\.]/g'); 如果(val!=“”){ valArr=val.split('.'); valArr[0]=(parseInt(valArr[0],1

我使用了下面的代码,在加键事件中将千和十进制分开。但输入15位数字后,值为0。原因是什么


var myinput=document.getElementById('myinput');
myinput.addEventListener('keyup',function(){
var val=该值;
val=val.replace(/[^0-9\.]/g');
如果(val!=“”){
valArr=val.split('.');
valArr[0]=(parseInt(valArr[0],10)).tolocalString();
val=valArr.join('.');
}
this.value=val;
});

问题:

这里的问题是,您在
parseInt()
上达到了
Number
的最大可能值。当它尝试解析输入
字符串
值时,请检查以了解更多详细信息

因此,当数字超过时,您输入的所有额外数字都将被忽略并转换为0。请查看更多解释和示例

因此,在JAVSCRIPT中,不能将较大的
数字
值视为
数字
,因为存在最大可能的值限制,所以需要将其视为
字符串
,这样它就可以超过该最大

解决方案:

这里的解决方案是将此
数字
视为
字符串
,并使用
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;
};
演示:


这是一个使用原始代码的过程。

请参阅。@Nit谢谢并理解。这有什么解决办法吗?这取决于你想用这个值做什么。如果您只需要值,而不关心类型,请以字符串形式执行所有操作,不要解析它。谢谢&明白!有什么解决办法吗?我不在乎这个问题type@sampath检查我的编辑,我使用
Regex
string.replace()
共享了一个解决方案。它可以工作。投票赞成。我不知道否决投票的原因是什么。@sampath我也是,我认为在编辑之前是否决投票,因为它没有显示解决方案。