JS给数字添加千位分隔符

66 篇文章 9 订阅

话不多说,直接上

1、数字转为字符串,整数部分低位往高位遍历

function format(number) {
  // 转为字符串,按照.拆分
  let arr = (number + '').split['.]
  // 整数部分再拆分
  let int = arr[0].split['']
  // 小数部分
  const fraction = arr[1] || ''
  // 返回的结果
  let r = ''
  let len = int.length

  // 倒叙遍历
  int.reverse().forEach((v, i) => {
	// 非第一位且位值是3的倍数,添加','
	if(i !== 0 && i % 3 === 0) {
	  r = v + ',' + r
	} else {
	  r = v + r
	}
  })

  // 整数部分 + 小数部分
  return r + (!!fraction ? '.' + fraction : '')
}

2、使用正则表达式

const reg = /(\d)(?=(\d{3})+$)/g

let num = "12345678";
console.log(num.replace(/(\d)(?=(?:\d{3})+$)/g,'$1,'))//"12,345,678"

// ⚠❗❗❗ 使用String()把数字转换为字符串的优点在于null等情况不会报错
console.log(String(123456789).replace(reg, "$1,"));  // 123,456,789
// ⚠❗❗❗ 支持整数,不支持小数
console.log(String(123456789.1315454).replace(reg, "$1,"));  // 123456789.1,315,454
console.log(String(1000).replace(reg, "$1,"));  // 1,000
console.log(String(null).replace(reg, "$1,"));  // null
console.log(String(undefined).replace(reg, "$1,"));  // undefined
console.log(String(NaN).replace(reg, "$1,"));  // NaN
console.log('😁😁😁😁😁😁');

format (value) {
  const reg = /\d{1,3}(?=(\d{3})+$)/g
  return `${value}`.replace(reg, '$&,')
}
function addThousandSeparator(number) {
  // 先将数字转为字符串,并判断是否有小数部分
  let [integerPart, decimalPart] = number.toString().split('.');
  
  // 对整数部分添加千分位分隔符
  integerPart = integerPart.replace(/\B(?=(\d{3})+(?!\d))/g, ',');

  // 如果有小数部分,则拼接整数部分和小数部分
  if (decimalPart) {
    return integerPart + '.' + decimalPart;
  } else {
    return integerPart;
  }
}

console.log(addThousandSeparator(1234567));     // 输出:1,234,567
console.log(addThousandSeparator(9876543.21));  // 输出:9,876,543.21
console.log(addThousandSeparator(123));         // 输出:123

3、使用toLocaleString()方法

// ⚠❗❗❗ 必须是数字,如果是null或者undefined的话,会报错
console.log((123456789).toLocaleString('en-US'));  // 123,456,789
// ⚠❗❗❗ 最多保留三位小数
console.log((123456789.1315454).toLocaleString('en-US'));  // 123,456,789.132
console.log('😁😁😁😁😁😁');

4、使用new Intl.NumberFormat()方法

console.log(new Intl.NumberFormat('en-US', {}).format(123456789.1315454));  // 123,456,789.132
console.log(new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }).format(123456789.1315454));  // ¥123,456,789

5、在vue中添加全局方法添加千位分隔符

涉及的数据比较多,写一个过滤器,将所有的数据都过滤一下,挂载到全局,不需要每个页面引用了。
创建一个js文件,实现数字千位分隔符

export function numberToCurrencyNo(value) {
  if(!value) return 0
  // 获取整数部分
  const intPart = Math.trunc(value)
  // 整数部分处理,增加,
  const intPartFormat = intPart.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')
  // 预定义小数部分
  let floatPart = ''
  // 将数值截取为小数部分和整数部分
  const valueArray = value.toString().split('.')
  if (valueArray.length === 2) { // 有小数部分
    floatPart = valueArray[1].toString() // 取得小数部分
    return intPartFormat + '.' + floatPart
  }
  return intPartFormat + floatPart
}

引用挂载到全局

在 main.js 文件中引入

import { numberToCurrencyNo } from '@/utils/numberToCurrency'
// 配置全局过滤器,实现数字千分位格式
Vue.filter('numberToCurrency', numberToCurrencyNo)

直接在页面使用

 <div class="total-num">{{totalNum | numberToCurrency}}</div>
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老电影故事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值