Javascript 我的replace方法在格式化数字时出错(在nums中添加逗号)

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

一切都很好,直到它达到6555444333222111或者说万亿,在我再添加一个数字(任何数字)后,它变成了65554443332220(例如,数字是5,它将自动为0,即来自的任何数字都将替换为0) 因为我在做一个计算器,所以如果它是6万亿,我按下按钮2作为例子,最后一个值应该是2,但它显示为0

这是我的密码:

        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