number.prototype.toLocaleString

  1. // 10000000.. 这里必须使用两个..
  2. 10000000..toLocaleString('cmn-Hans-CN',{
  3. style: 'currency',
  4. currency: 'CNY'
  5. })
  6. // "¥10,000,000.00"

第一个参数 语言代码 cmn-Hans-CN 表示 普通话,简体,中国大陆

关于一些中文的语言代码可点击查看

第二个参数 style 表示要使用的格式样式 默认为 decimal

  • decimal: 用于纯数字格式
  • currency:用于货币格式
  • percent: 用于百分比格式

第三个参数 currency 表示在货币格式化中使用货币符号,当style为currency是,必须指定该项,CNY表示人民币

正则

  1. 10000000..toString().replace(/\B(?=(\d{3})+$)/g,',')
  2. // "10,000,000"
  3. // 更新 支持小数点
  4. function toCurrency(currency) {
  5. // 首先判断传入的数字是否带有小数,如果不带有则补入两位小数
  6. // 使用正则的正向先行断言将小数点之前的数字补上千分符
  7. // 使用正则的正向后行断言将小数点之后的数字进行处理并保留两位数字
  8. return '¥' + (((currency = currency.toString()).includes('.') ? currency : currency + '.00').replace(/\B(?=(?:\d{3})+\.)/g, ',').replace(/(?<=\.)\d*$/g, float => float.padEnd(2, '0').substring(0, 2)));
  9. }

转数组操作

  1. function toCurrency(currency) {
  2. return '¥' + currency.toString().split('').reverse().map((v, i, arr) => i !== 0 && (i + 1)%3 === 0 && i !== arr.length - 1 ? "," + v : v).reverse().join('');
  3. }
  4. toCurrency(1000000) // ¥1,000,000
  5. // 更新 支持小数点
  6. function toCurrency(currency) {
  7. let pointIndex;
  8. // 首先判断传入的数字是否带有小数,如果有小数,则先将小数点之前的数字截取出来
  9. // 将数字的整数部分转为数组并反向排列,然后每隔三位补入千分符,补充完毕后再将数组转为字符串
  10. // 截取数字的小数部分,补充或保留两位小数后进行拼接
  11. return '¥' + (currency = currency.toString()).substring(0, ~(pointIndex = currency.indexOf('.')) ? pointIndex : currency.length).split('').reverse().map((v, i, arr) => i !== 0 && (i + 1)%3 === 0 && i !== arr.length - 1 ? "," + v : v).reverse().join('') + (~pointIndex ? currency.substring(pointIndex, pointIndex + 3).padEnd(3, '0') : '.00');
  12. }
  13. toCurrency(1000000.05) // ¥1,000,000.05