Intl.NumberFormat
对象来格式化数字,使其具有千分位分隔符并保留两位小数。这是个国际化的 API,允许根据特定的地区格式来格式化数字。
下面是一个 JS 格式化千分位数字的示例代码:
function formatNumber(number) { return new Intl.NumberFormat('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(number); } // 使用示例 const formattedNumber = formatNumber(1234567.891); console.log(formattedNumber); // 输出: 1,234,567.89
在这个例子中,Intl.NumberFormat
的第一个参数是语言环境(在这个例子中是 en-US,代表美国英语),第二个参数是一个选项对象,其中 minimumFractionDigits
和 maximumFractionDigits
分别指定了要保留的小数位数的最小值和最大值。
如果你想要根据不同的地区格式来格式化数字,只需要更改第一个参数即可。例如,如果你想要以中国地区的格式来显示数字,可以将其改为 zh-CN。
function formatNumberForChina(number) { return new Intl.NumberFormat('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(number); } // 使用示例 const formattedNumberForChina = formatNumberForChina(1234567.891); console.log(formattedNumberForChina); // 输出: 1,234,567.89
也使用正则表达式来给数字字符串添加千分位符,可以通过替换操作来实现。以下是一个示例函数,它将一个数字字符串转换为带有千分位符的格式:
function addCommasToNumber(numStr) { // 将数字转换为数组,然后反转 const reversed = numStr.split('').reverse(); // 使用正则表达式添加逗号 const commaSeparated = reversed.join('').replace(/(\d{3})(?=\d)/g, '$1,'); // 再次反转字符串以获得正确的顺序 return commaSeparated.split('').reverse().join(''); } // 使用示例 const numberStr = '1234567'; const formattedNumberStr = addCommasToNumber(numberStr); console.log(formattedNumberStr); // 输出: "1,234,567"
在这个函数中,我们首先将数字字符串分割成单个字符的数组,然后反转这个数组。接着,使用正则表达式 /(\d{3})/> 来匹配每三个连续的数字。(?=\d)> 是一个正向前瞻断言,它确保匹配的三个数字后面还有数字,这样我们就不会在数字的最后添加逗号。匹配到的部分会被替换为在数字后面加上逗号的版本。最后,我们将结果再次反转以获得正确的顺序。
请注意,这种方法只适用于不包含小数点的整数。如果数字字符串包含小数点,你需要在替换操作之后重新连接小数部分。
let number = 1234567.891; let formattedNumber = number.toLocaleString(); console.log(formattedNumber); // 输出: "1,234,567.891"