我使用一个小代码js将逗号添加到值:
function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
尝试将逗号添加到像sextillion值这样的大值时,我遇到了问题。 例如
addCommas(1000000) //return correct "1,000,000"
但是如果使用像这样的大值
addCommas(50949024266983356472874) // return wrong "5.094902426698335e+22"
我做错了什么或哪里?
答案 0 :(得分:2)
您的输入可能已经是浮点数。大于2 ^ 32的数字往往是这样的。确保你的输入是一个字符串,你的函数运行正常。
JavaScript没有int
和float
类型。相反,它只有一个Number
类型,它将自己决定何时使用它。
答案 1 :(得分:1)
当你这样做时
nStr += '';
您要求javascript首先将您的号码转换为字符串。那是它决定把它写成"5.094902426698335e+22"
的时候。问题不在于算法的其余部分。
转换描述为here in ecmascript
答案 2 :(得分:0)
如果您的号码存储在一个字符串中,则以下功能将满足您的要求。
function addCommas( txtNum ) {
var parts = txtNum.split(".");
parts[0] = parts[0].reverse().replace(/(\d{3})/g, "$1,").reverse();
return parts.join(".");
}
String.prototype.reverse = function () {
return this.split("").reverse().join("");
}
addCommas( "-50000000000000000000000000000000000000000.0000" );
// => -50,000,000,000,000,000,000,000,000,000,000,000,000,000.0000