多种方式实现千位分隔符

摘要:
今天遇到一个问题,用正则实现千位分隔符,例如:12345678.90转换成12,345,678.90。现在对千位分隔符的实现进行总结,不仅仅是正则的实现哦。$1:表示组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。=+.)/g;//'1234567.12345'.replace=˃'1,234,567.12345'那么,如果希望整数部分和小数部分都添加千位分隔符,可以通过分支条件实现:reg=/(?参看:请使用千位分隔符(逗号)表示web网页中的大数字MDN正则表达式30分钟入门教程

今天遇到一个问题,用正则实现千位分隔符,例如:12345678.90 转换成 12,345,678.90。如果用 js 实现挺简单的,然而,正则实现优雅多了,但是如果对正则表达式不熟的话,还是有一定难度的。

现在对千位分隔符的实现进行总结,不仅仅是正则的实现哦。

方法一:toLocalString()

使用方法:

numObj.toLocaleString([locales[, options]]);

例如:

(1234567).toLocaleString();    // '1,234,567'
(1234567.12345).toLocaleString();       // '1,234,567.123'

locales 默认为 ‘en-US’,'CN'表示中国,当然结果是一样的。

如以上例子所示,该方法会忽略小数点后三位之后的数字。

方法二:正则

代码:

string.replace(/(d)(?=(d{3})+$)/g, '$1,');

例如:

let reg = /(d)(?=(d{3})+$)/g;
'1234567'.replace(reg, '$1,');

(?=exp):表示匹配 exp 前面的位置。

$1:表示组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。

然而这个正则表达式只适用于整数。因为reg 表达式中,用 $ 匹配结尾,当 string 含有小数点,reg 遇到小数点后就会停止匹配,所以只能分割小数点后的数。

例如:

'1234567.12345'.replace(reg, '$1,');  //'1234567.12,345'

如果想要匹配整数部分,保留小数点部分,可以将 '$' 换为 '.',即:

reg = /(d)(?=(d{3})+.)/g;      // '1234567.12345'.replace(reg, '$1,') => '1,234,567.12345'

那么,如果希望整数部分和小数部分都添加千位分隔符,可以通过分支条件实现:

reg = /(d)(?=(d{3})+(.|$))/g;    // '1234567.12345'.replace(reg, '$1,') => '1,234,567.12,345'

不过这个需求好像有点奇怪,哈哈哈。

方法三:js 循环遍历

代码:

functionthousandsSepar(num) {
// 只能包含 0 个或 1 个 '.'
if(!/^d+(.d*)?$/.test(num)) { return;   }   let str = num + '',      newStr = '',      count = 0,      decimal = '',
index
= str.indexOf('.');
// 保留小数点后 3 位
if(index > 0) {     decimal = str.substring(index, index + 4);     str = str.substr(0, index + 4);   } for(let i = index - 1; i >= 0 ; --i) {     newStr +=str[i];     ++count;
// 每 3 位插入一个 ','
if(count === 3 && i > 0) {       newStr += ',';       count = 0;     }   } return newStr.split('').reverse().join('') +decimal;
}

实现效果同 toLocaleString();js 有多种实现方式,这里只是举个栗子。

参看:

请使用千位分隔符(逗号)表示web网页中的大数字

MDN

正则表达式30分钟入门教程

免责声明:文章转载自《多种方式实现千位分隔符》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇mysql主从之半同步复制和lossless无损复制第11节、C#继承下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SSIS 学习(2):数据流任务(上)【转】

数据流任务是SSIS中的一个核心任务,估计大多数ETL包中,都离不开数据流任务。所以我们也从数据流任务学起。   数据流任务包括三种不同类型的数据流组件:源、转换、目标。其中:   源:它是指一组数据存储体,包括关系数据库的表、视图;文件(平面文件、Excel 文件、Xml 文件等);系统内存中的数据集等。   转换:这是数据流任务的核心组件,如果说数据流...

Numpy---4.数组的存储和加载

一、二进制 1.numpy.save() numpy.save(file, arr, allow_pickle=True, fix_imports=True) 功能:将数组以二进制的形式存储到文件中 参数: file:文件名或者文件对象。如果是个文件名,则会自动添加后缀.npy如果没有该后缀的话 arr:被存储的数组 allow_pickle:一个...

Android 实现动态匹配输入的内容 AutoCompleteTextView和MultiAutoCompleteTextView

AutoCompleteTextView1.功能:动态匹配输入的内容,如百度搜索引擎当输入文本时可以根据内容显示匹配的热门信息。2.独特属性:android:completionThreshold 设置输入多少字符时自动匹配 使用AutoCOmpleteTextView实现自动匹配输入的内容private AutoCompleteTextView acTe...

awk命令使用方法

1、基本语法 awk '{pattern + action}' {filenames} awk语法中pattern表示在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。 2、awk原理 awk 对输入...

MQTT协议中的topic

1、MQTT协议中的topic 定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题的payload,才能进行通信。 2、 主题层级分隔符——“/” 主题层级分隔符使得主题名结构化。如果存在分隔符,它将主题名分割为多个主题层级。 斜杠(‘/’ U+002F)用于分割主题的每个层级,为主题名提供一个分层结构。当客户端订阅指定的主题过滤器包含两种通...

hiveql函数笔记(二)

1、数据查询 //提高聚合的性能 SET hive.map.aggr=true; SELECT count(*),avg(salary) FROM employees; //木匾不允许在一个查询语句中使用多于一个的函数(DISTINCT。。。)表达式 SELECT count(DISTINCT symbol) FROM stocks; 表生成函数: exp...