Javascript 我的replace方法在格式化数字时出错(在nums中添加逗号)
一切都很好,直到它达到6555444333222111或者说万亿,在我再添加一个数字(任何数字)后,它变成了65554443332220(例如,数字是5,它将自动为0,即来自的任何数字都将替换为0) 因为我在做一个计算器,所以如果它是6万亿,我按下按钮2作为例子,最后一个值应该是2,但它显示为0 这是我的密码:Javascript 我的replace方法在格式化数字时出错(在nums中添加逗号),javascript,formatting,calculator,Javascript,Formatting,Calculator,一切都很好,直到它达到6555444333222111或者说万亿,在我再添加一个数字(任何数字)后,它变成了65554443332220(例如,数字是5,它将自动为0,即来自的任何数字都将替换为0) 因为我在做一个计算器,所以如果它是6万亿,我按下按钮2作为例子,最后一个值应该是2,但它显示为0 这是我的密码: Number.prototype.formattedNumber = function() { this.Number = String(this
Number.prototype.formattedNumber = function() {
this.Number = String(this).split('\.'); //Split '.' So it doesnt affect decimals
if(this.Number.length > 1) {
this.first = this.Number[0];
this.second = this.Number[1];
this.Number = this.first.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,') + '.' + this.second;
return this.Number;
}else{
this.first = this.Number[0];
this.Number = this.first.replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
console.log(this.Number);
return this.Number;
}
}
有没有办法解决这个问题?如果多加一个数字意味着多加一个数字,那是因为您超过了javascript的最大安全整数值。有关更多信息,请参阅MDN上的 以您给出的万亿为例的数字:
6555444333222111
javascript的最大安全整数值:9007199254740991
两者相邻:
6,555,444,333,222,111
9,007,199,254,740,991
在示例中添加另一个数字会使其比最大整数值大一个数量级,因为javascript不知道如何处理它,所以最终会失去一些准确性
您应该检查输入的位数,如果大于16,则使用。您可能还需要在代码的其他部分重做一些工作,例如,在使用BigInt时会丢失准确性,因为它试图将BigInt转换为Number
6,555,444,333,222,111
9,007,199,254,740,991