首页 > 编程语言 >js/javaScript实现金额千分位

js/javaScript实现金额千分位

时间:2023-11-02 15:23:05浏览次数:39  
标签:toLocaleString val javaScript 千分 js currency const 小数

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

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

方法一:

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'

标签:toLocaleString,val,javaScript,千分,js,currency,const,小数
From: https://www.cnblogs.com/tnnyang/p/17805500.html

相关文章

  • vue vue.config.js 配置
    1.开启sourceMap//显示sourceMap,便于调试 //process.env.NODE_ENV有的是dev/prod,有的是development/production,需要自己确认下productionSourceMap:process.env.NODE_ENV!=='production',......
  • js worker
         index.html<!DOCTYPEhtml><html><head><title>JavaScriptWorkerExample</title></head><body><script>//主线程constmainWorker=newWorker('worker.js');......
  • JS加密/解密之jsjiami在线js加密的效率问题
    故事背景 经常有客户反馈,v7加密的效率比v6低,但是安全性更好。这里我给大家科普一下关于jsjiami的优化诀窍。示例源代码//伪代码while(1){varname=‘张三’}优化后var_name='张三';while(1){varname=_name}优化原理相信很多朋友会疑惑这两者的区别是什......
  • python题目:把JSON字符串里面的数据进行替换【杭州多测师_王sir】
    name ,时间戳,value这三个值要变 "tags":[{"values":[{"value": 43.6525,"quality": 192,"timestamp": 00}],"name": "/system/Template_2/Instance_8/system/Property_10",“type”: 12}]} import randomimp......
  • JavaScript中大于Math.pow(2, 53)的数,如何进行进制转换?精度问题,超过18位的数字如何进
    console.log('JavaScript中大于Math.pow(2,53)的数,如何进行进制转换?')//示例console.group('示例')console.log('使用bignumber.js库完美解决。[https://github.com/MikeMcl/bignumber.js/]')console.log('示例:18446744071545290752转为二进制')console.log......
  • JavaScript操作checkbox的方式
    JavaScript操作checkbox的方式和操作radio的方式相似,都是利用元素项的checked属性来完成。先获取checkbox元素集合,遍历集合,对集合中的每一项做操作。 <body> <p> <labelfor="hobby">Hobby: <inputtype="checkbox"name="hobby"value="reading"/>rea......
  • JavaScript 保存文件
       <scriptsrc="http://cdn.jsdelivr.net/g/filesaver.js"></script><script>functionSaveAsFile(t,f,m){try{varb=newBlob([t],{type:m});saveAs(b,f);}catch(......
  • .net json 处理
    处理较复杂的Json字符串,不需要对Json进行序列化操作,以下是一种非常简单的方法,记录以下;Json字符串如下:{ "code":0, "msg":"SUCCESS", "result":[{ "changesContent":[{ "unionNo":"1719708390162472960", "orderDel......
  • vuejs3.0 从入门到精通——基于 Vite 搭建 Vue3 项目
    基于Vite搭建Vue3项目 一、为什么选Vitehttps://www.vitejs.net/ 在浏览器支持ES模块之前,JavaScript并没有提供的原生机制让开发者以模块化的方式进行开发。这也正是我们对“打包”这个概念熟悉的原因:使用工具抓取、处理并将我们的源码模块串联成可以在浏览器中运......
  • 无法加载文件 E:\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本。有关详
    npminstall报错解决办法打卡windospowershell并且以管理员运行输入命令set-executionpolicyremotesignedY......