在 JavaScript 中给数字加上千位分隔符并保留二位小数

本文介绍了在前端业务中如何使用JavaScript函数formatNumber和processDot对数字进行格式化,包括三位千分隔和保留两位小数,以及为何选择这种方法而非toFixed。

在前端业务中,我们经常需要对数字(比如说金额)进行处理,这个时候可能客户要求使用千位分隔符(例如说:999,999,999 这样的数字)来对数字进行格式化,那么应该如何去做呢?

一、业务场景一:对数字使用千分符。

function formatNumber(num) {
  return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); 
}

这里我们直接对数字进行toString(),将其转换成字符串。

然后使用正则表达式 /\B(?=(\d{3})+(?!\d))/g 来匹配数字中的每三位。

\B 匹配非单词边界,也就是数字中间位置。(?=(\d{3})+(?!\d)) 是一个正向前瞻匹配,匹配后面接三位数字但是不能把最后一位数字包含进来。

replace() 中使用逗号替换匹配到的位置。

这样就可以非常简洁的实现三位分隔了。

二、业务场景二:不仅使用千分符,并且保留两位小数。

function processDot(num, precision) {
  return (+(Math.round(+(num + "e" + precision)) + "e" + -precision)).toFixed(
    precision,
  );
}

function formatNumber(num) {
  const result = processDot(num, 2);
  return result.replace(/\d(?=(\d{3})+\.)/g, "$&,");
}

这里首先使用  processDot 函数将数字保留两位小数(自带四舍五入的功能)。然后使用正则表达式 /\d(?=(\d{3})+.)/g 来匹配数字后面每三位逗号分隔。

为什么不用自带的 toFixed 方法呢?因为 toFixed() 方法可能存在精度问题,如果计算涉及到金额,会不太女。

replace() 方法中的 $& 表示匹配到的数字,所以可以把匹配到的数字替换成自身加上逗号。

这样就可以很方便的格式化数字为指定小数位数并加上千分符了。

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

保禄241225

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

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

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

打赏作者

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

抵扣说明:

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

余额充值