在JavaScript中用逗号格式化数字

我找到了一个很好的函数,详细介绍了如何在JavaScript中用逗号格式化数字,并认为我会在此处重现它。它基本上接受任何数字,然后将其转换为带格式的字符串,并以逗号分隔千位。该number_format()功能在PHP中可用,在通过AJAX调用返回格式之前,我一直依靠PHP来对格式进行排序。现在,我可以将此函数包含到我的JavaScript库中,并在客户端进行此操作。

该函数通过使用正则表达式先将字符串拆分为整数和十进制,然后再按三位数的组将数字拆分。

使用的正则表达式为(\ d +)(\ d {3}),该表达式查找三个数字的序列,后跟任意数字。这是一个小技巧,可导致正则表达式引擎从右到左而不是从左到右工作。

function addCommas(nStr){
 nStr += '';
 var x = nStr.split('.');
 var x1 = x[0];
 var x2 =x.length> 1 ? '.' + x[1] : '';
 var rgx = /(\d+)(\d{3})/;
 while (rgx.test(x1)) {
  x1 = x1.replace(rgx, '$1' + ',' + '$2');
 }
 return x1 + x2;
}

这会导致在每个第三个数字字符中添加一个逗号。因此,对于数字123456,将返回字符串123,456。这里还有更多示例。

addCommas(1000); // 1,000
addCommas(12345); // 12,345
addCommas(1234567890); // 1,234,567,890
addCommas(12345.1234); // 12,345.1234

该站点还详细介绍了格式化数字的创建过程,其中包括不同的参数。这意味着您可以使用任何东西,而不用逗号分隔三个数字的块。

function addSeparatorsNF(nStr, inD, outD, sep){
 nStr += '';
 var dpos = nStr.indexOf(inD);
 var nStrEnd = '';
 if (dpos != -1) {
  nStrEnd = outD + nStr.substring(dpos + 1, nStr.length);
  nStr = nStr.substring(0, dpos);
 }
 var rgx = /(\d+)(\d{3})/;
 while (rgx.test(nStr)) {
  nStr = nStr.replace(rgx, '$1' + sep + '$2');
 }
 return nStr + nStrEnd;
}

之所以创建此函数,是因为并非每个数字都采用相同的格式。例如,数字1234的格式可能为1,234甚至是1.234。

该函数采用以下参数

  • nStr:这是要格式化的数字。这可能是数字或字符串。没有对此输入进行验证。

  • inD:这是字符串的十进制字符。这通常是一个点,但可能还有其他东西。

  • outD:这是将十进制字符更改为的内容。

  • sep:这是分隔符,通常是逗号。

该函数采用输入字符串,并根据小数点字符将其分为两部分。小数点前的字符串与前一个函数使用的正则表达式相同,主要区别是分隔符取自函数参数。

这里有一些例子。

alert(addSeparatorsNF(1234567890,'.','.',',')); // 1,234,567,890
alert(addSeparatorsNF(12345.1234,'.','POINT','COMMA')); // 第12章
alert(addSeparatorsNF(12345.1234,'5','POINT','COMMA')); // 1COMMA234POINT.1234
alert(addSeparatorsNF('1234,56',',','.',',')); // 1,234.56