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

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

方法一:

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'

js/javaScript实现金额千分位的更多相关文章

  1. js jquery版本的 金额千分位转换函数(非正则,效率极高)

    没想到js里面没有 金额千分位格式化的处理函数(例:1,234.01 这样的格式),网上搜了一圈,都是使用正则的方式处理的.正则的效率不敢恭维啊,又耗费资源速度又慢(虽然处理起来会直观一些). 因此专 ...

  2. [js开源组件开发]数字或金额千分位格式化组件

    数字或金额千分位格式化组件 这次距离上一个组件<[js开源组件开发]table表格组件>时隔了一个月,由于最近的项目比较坑,刚挖完坑,所以来总结性提出来几个组件弥补这次的空缺,首先是金额和 ...

  3. js jquery版本号 金额千分之一转换功能(非规范,高效率)

    没想到js将没有 金额千分之一格处理器类型(例子:1,234.01 这种格公式).互联网搜索圈,我们使用的是常规方式.常规效率受宠若惊啊.和资源密集型,速度慢(虽然处理起来会很直观). 因此专门写一个 ...

  4. Highchar.js插件提示框千分位显示为空格而不是逗号 --(2018 08/06-08/12周总结)

    1.Oracle在已经存在主键的表中插入复合主键的SQL语句 如已有一个表test_key,其中a1列为主键. CREATE TABLE TEST_KEY( A1 VARCHAR2(3) NOT NU ...

  5. Js笔试题之千分位格式化

    用js实现如下功能,将给定的数字转化成千分位的格式,如把“10000”转化成“10,000”,并考虑到性能方面的因素. 一.首先想到的办法,将数字转换为字符串(toString())再打散成数组(sp ...

  6. js将数字转为千分位/清除千分位

    /** * 千分位格式化数字 * * @param s * 传入需要转换的数字 * @returns {String} */ function formatNumber(s) { if (!isNaN ...

  7. SQL 金额千分位显示

    第一种:select convert(varchar,cast(_money AS MONEY),1) AS _money -----带小数点的第二种: select reverse(stuff(re ...

  8. C#金额千分位分隔

    "234234".ToString("C") 显示:¥234,234

  9. js数字格式化为千分位

    方法1: 浏览器自带的一个方法 const num=12345.6789 num.toLocaleString();=>"12,345.679" 方法2: 正则匹配 func ...

  10. Grid数字或金额千分位或保留两位小数

    formatter: 'number', formatoptions: { thousandsSeparator: "", decimalPlaces: 2 }

随机推荐

  1. Python和PyTorch深入实现线性回归模型:一篇文章全面掌握基础机器学习技术

    1. 简介 1.1 线性回归模型概述 线性回归是一种统计学中的预测分析,该方法用于建立两种或两种以上变量间的关系模型.线性回归使用最佳的拟合直线(也称为回归线)在独立(输入)变量和因变量(输出)之间建 ...

  2. 【overcome error】dereferencing pointer to incomplete type

    @ 目录 前言 解决 代码情况 分析问题 尾声 前言 这个问题是我在学习数据结构链栈部分遇到的,英文报错如题所示,中文意思是:取消引用不完整类型的指针,在百度一圈也没明白,(百度搜索,看一个和全看基本 ...

  3. Django日志输出

    # 自定义日志输出信息 LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'standard': ...

  4. 【译】All-In-One Search 在 Visual Studio 17.6 中可用

    一体化搜索体验是在17.2预览版中首次引入的,从那以后我们一直在改进它的质量.新的搜索将代码和特性搜索功能合并到一个 UI 中,因此您可以在一个地方找到所需的东西.实时结果和结果预览加速了这个过程,让 ...

  5. 在langchain中使用自定义example selector

    简介 在之前的文章中,我们提到了可以在跟大模型交互的时候,给大模型提供一些具体的例子内容,方便大模型从这些内容中获取想要的答案.这种方便的机制在langchain中叫做FewShotPromptTem ...

  6. 行行AI人才直播第15期:【AIGC科技公司法律顾问】Amber《AIGC的法律挑战》

    近年来,AIGC技术的迅速进步为社会经济发展带来了新的机遇.各行各业都开始关注AIGC相关技术在商业落地中的应用,AIGC相关的创业及项目如雨后春笋般涌现.然而,AIGC的广泛应用也带来了一系列的法律 ...

  7. UI通过元素定位实现特定区域截图

    最近计划做一个自动截图的工具,目的是实现性能测试资源监控平台(grafana)各硬件资源的自动截图,解放手工操作.前期的截图做了如下探索. 1. 整个页面截图 1.1 代码实现 通过save_scre ...

  8. C++类学习心得

    参考文献:https://www.cnblogs.com/xiongxuanwen/p/4290086.html 类的一个重要点是构造函数,其官方说明为: 构造函数是一个特殊的.与类同名的成员函数,用 ...

  9. Go 并发编程 - runtime 协程调度(三)

    Go Runtime Go runtime 可以形象的理解为 Go 程序运行时的环境,类似于 JVM.不同于 JVM 的是,Go 的 runtime 与业务程序直接打包在一块,是一个可执行文件,直接运 ...

  10. 《Kali渗透基础》06. 主动信息收集(三)

    @ 目录 1:服务识别 1.1:NetCat 1.2:Socket 1.3:dmitry 1.4:nmap 2:操作系统识别 2.1:Scapy 2.2:nmap 2.3:p0f 3:SNMP 扫描 ...