如何在没有 RegExp 的情况下为数字添加逗号
How to add commas to numbers without RegExp
如果我能够使用正则表达式或 toLocaleString() 这将很容易:
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
但是,我正在转换的脚本不能使用正则表达式,因此在数字中添加逗号有点冗长。这是我目前在 JavaScript.
中的内容
var nums = [1, 12, 124, 1024, 10024, 100024, 1200240, 11000240, 101000240, 1201000240, 12010002400];
for (i = 0; i < nums.length; i++)
{
var n = nums[i];
var str = n.toString();
var l = str.length;
var niceNum = gimmeNicerNumber(n);
alert(n + " ... " + niceNum + " " + l + " i: " + (i+1));
}
function gimmeNicerNumber (num)
{
str = num.toString();
var len = str.length;
var numString = "";
if (len < 4) return str;
for (i = 0; i < len; i++)
{
numString += str[i];
if (i%3 == 0)
{
numString += ",";
}
}
// re=evaluate len!
len = numString.length;
if (numString.charAt(len-1) == ",") numString = numString.slice(0,-1);
return numString;
}
我希望输出是
1 12 124 1,024 10,024 100,024 1,200,240 11,000,240 101,000,240 1,201,000,240 12,010,002,400
只是它跳过了循环中的几个数字(3、5、7),我不明白为什么。在这方面有一双新的眼睛会有所帮助。谢谢。
好的,现在我有了这个:
function niceNumber(n) {
var str = ""+n;
var l=str.length;
while (l>3) {
l-=3;
str = str.slice(0,l)+","+str.slice(l);
}
return str;
}
var nums = [1, 12, 124, 1024, 10024, 100024, 1200240, 11000240, 101000240, 1201000240, 12010002400];
var a=[];
for (i=0;i<nums.length;++i) { a.push(niceNumber(nums[i])); }
console.log(a.join(" "));
完成!
怎么样 (>=IE11)
for (var i = 0; i < nums.length; i++)
console.log( nums[i].toLocaleString("en-US") );
1
12
124
1,024
10,024
100,024
1,200,240
11,000,240
101,000,240
1,201,000,240
12,010,002,400
我发现我哪里出错了。我忘了在 for...loop 中添加 var,这把事情搞砸了。
for (i = 0; i < nums.length; i++)
应该是
for (var i = 0; i < nums.length; i++)
我还添加了一个计数器而不是
if (i%3 == 0)
如果我能够使用正则表达式或 toLocaleString() 这将很容易:
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
但是,我正在转换的脚本不能使用正则表达式,因此在数字中添加逗号有点冗长。这是我目前在 JavaScript.
中的内容var nums = [1, 12, 124, 1024, 10024, 100024, 1200240, 11000240, 101000240, 1201000240, 12010002400];
for (i = 0; i < nums.length; i++)
{
var n = nums[i];
var str = n.toString();
var l = str.length;
var niceNum = gimmeNicerNumber(n);
alert(n + " ... " + niceNum + " " + l + " i: " + (i+1));
}
function gimmeNicerNumber (num)
{
str = num.toString();
var len = str.length;
var numString = "";
if (len < 4) return str;
for (i = 0; i < len; i++)
{
numString += str[i];
if (i%3 == 0)
{
numString += ",";
}
}
// re=evaluate len!
len = numString.length;
if (numString.charAt(len-1) == ",") numString = numString.slice(0,-1);
return numString;
}
我希望输出是
1 12 124 1,024 10,024 100,024 1,200,240 11,000,240 101,000,240 1,201,000,240 12,010,002,400
只是它跳过了循环中的几个数字(3、5、7),我不明白为什么。在这方面有一双新的眼睛会有所帮助。谢谢。
好的,现在我有了这个:
function niceNumber(n) {
var str = ""+n;
var l=str.length;
while (l>3) {
l-=3;
str = str.slice(0,l)+","+str.slice(l);
}
return str;
}
var nums = [1, 12, 124, 1024, 10024, 100024, 1200240, 11000240, 101000240, 1201000240, 12010002400];
var a=[];
for (i=0;i<nums.length;++i) { a.push(niceNumber(nums[i])); }
console.log(a.join(" "));
完成!
怎么样 (>=IE11)
for (var i = 0; i < nums.length; i++)
console.log( nums[i].toLocaleString("en-US") );
1
12
124
1,024
10,024
100,024
1,200,240
11,000,240
101,000,240
1,201,000,240
12,010,002,400
我发现我哪里出错了。我忘了在 for...loop 中添加 var,这把事情搞砸了。
for (i = 0; i < nums.length; i++)
应该是
for (var i = 0; i < nums.length; i++)
我还添加了一个计数器而不是
if (i%3 == 0)