金额千分位

192 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

前言:

成功没有捷径但成长有路径

css必备场景。专注积累,每天记录一个知识点,老概念新理解,重点记录一下

每天梳理一个场景,知识点查漏补缺,充实满足。

正文

背景

项目中的金额展示,现在的设计要求,必须将金额展示成千分位格式,在展示较大的数字的场景中,比如金额,总计等等,对这些数字进行千分位,是一种很常见的做法,比较直观方便,利于阅读。

方法

一,数组/字符串分割

思路是,纯切割,手动每三位添加',',不太推荐,这里就不描述了

二,利用正则

原理是,d{3} 每3位数字匹配一次,对前面一个数字加逗号。此处正则不会区分小数点,所以我们要写两个

/*金额三位数分隔*/

formatNumber(num) {
  num = num.toString()
  let reg = num.indexOf('.') > -1 ? /(\d)(?=(\d{3})+.)/g : /(\d)(?=(\d{3})+$)/g
  return num.replace(reg, '$1,')
}

formatNumber(1234.5678) // "1,234.5678"
formatNumber(1234) // "1,234"

三,number.toLocaleString

初始化数字或日期,通过传参来表现,某些场景下相当有用。比如这个问题,toLocaleString在数字类型上的使用,金额的千分位实现

const num = 15838742;
num.toLocaleString(); // 15,838,742
num.toLocaleString('zh', { styleț 'percent' }); //15,838,742%   也可以带百分号
num.toLocaleString('zh',{ style:'currency', currency:'CNY'}); / /¥2,333,333.00  带货币符号

四,工具类

手写的方法总是会有一定概率发生错误,尤其对于金额的处理,发生失误影响面会很大,需要特别的严谨,最推荐的还是使用成熟的工具,比如 numeral

Numeral.js 是一个用于格式化和操作数字的 JavaScript 库,数字可以格式化成货币、百分比、时间,甚至是带有小数点、千分位和缩写,这里只介绍千分位,具体可以去官网详细看下。

import numeral from "numeral";
const numeralFormat ={
  normal:"0,0", // 不带小数  1,234
  percentage:"0.[0]%", // 带百分比
  money:"0,0.00", //保留两位小数  1,234.00
} ;

numeral(123456).format(numeralFormat[type]);