js/javaScript实现金额千分位

作为前端开发,我们都知道,在实际的需求开发中,难免会遇到需要将接口返回的金额进行千分位格式化的场景。千分位后的金额便于阅读,提升用户体验。金额千分位可以由前端来处理,也可以后端处理后返回给前端展示。

下边就来贴一下前端的两种实现方式:

方法一:

const checkNaN = (value, cb) => {
  const val = parseFloat(value)
  return isNaN(val) ? undefined : cb(val)
}

// 保留小数
export const decimal = (value, precision = 2) => checkNaN(value, v => v.toFixed(precision))

// 金额千分位
export const currency = (() => {
  return (v, precision = 2) => {
    const [n, d = []] = decimal(v, precision).toString().split('.')
    return [n.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')].concat(d).join('.')
  }
})()

以上代码中,currency方法采用了闭包的方式返回了一个函数,该函数接收两个参数,第一个参数为需要千分位的金额数字,第二个参数为需要保留的小数,默认保留两位小数且四舍五入。

decimal方法是用来保留小数的,在其内部还会用checkNaN方法对传进来的参数进行数值类型的判断。

n.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,')

该代码使用正则表达式来匹配千分位的位置,然后通过 replace 方法将匹配到的位置插入逗号进行格式化。

使用方式:

currency(100000.23567, 4) // '100,000.2357'

方法二:

const currency = v => {
  let val = parseFloat(v)
  val = isNaN(val) ? undefined : val
  return val.toLocaleString()
}

该方法相当的简单粗暴,toLocaleString 可以直接将金额进行千分位格式化,不过该方法默认最多保留三位小数且小数位超过三位时第三位会四舍五入。

使用方式:

currency('1235689.2357') // '1,235,689.236'

关于toLocaleString方法,还有其他比较好玩的操作,比如:

const a = 1
a.toLocaleString('zh', { style:'percent' }) // 100%

const b = 2
b.toLocaleString('zh', { style:'percent' }) // 200%

const d = 0.9
d.toLocaleString('zh', { style:'percent' }) // 90%

new Date().toLocaleString() // '2023/11/2 下午3:03:03'

new Date().toLocaleString('chinese', { hour12:false }) // '2023/11/2 15:03:21'
posted @ 2023-11-02 15:16  豫见陈公子  阅读(315)  评论(0编辑  收藏  举报