最近一个项目中使用到了千位分隔这个功能,在网上也看见一些例子,但是实现起来总觉有些复杂。因此,自己实现了一个千位分隔,留给后来的我们。

先上源码吧。

该方法支持传入的是一个数字字符串,数字。第二个参数为保留小数的位数,默认保留两位小数;

function splitThousands(num, fixed) {
if (typeof num !== "number") {
num = parseFloat(num);
}
var reg = /\B(?=(\d{3})+$)/g;
num = num.toString().split(".");
fixed = fixed == undefined ? 2 : fixed; num[0] = num[0].replace(reg, ",");
num[1] = num[1] ? num[1].substr(0, fixed) : "00000000000000000".substr(0, fixed); return fixed ? num.join(".") : num[0];
}

这个方法实现非常简单,就是一个正则的问题。在该实现方法中,难点还是这个正则。

才陋学书,简单看看这个正则:

\B 同 \D, \W 等一样,取 \b 的反方向。 \b 单词分隔符,那么很明显,\B 就是非单词分隔符。 eg:

var str = "hello world, hello MobroZhu, not Mobro Zhu";
var reg = [/Mobro\b/g, /Mobro/g];
console.log(reg[0], reg[0].exec(str) , "\n" + reg[1], reg[1].exec(str));

打印日志如下:

/Mobro\b/g ["Mobro", index: 33, input: "hello world, hello MobroZhu, not Mobro Zhu"] "
/Mobro/g" ["Mobro", index: 19, input: "hello world, hello MobroZhu, not Mobro Zhu"]

很明显可以看出来,两次找到的 Mobro 不是同一个。没有 \b 的话,表示只要匹配到 Mobro 就算数。所以,/Mobro/g 会匹配到两个 Mobro,而 /Mobro\b/g 只会匹配到后面一个 Mobro.

?= 表示去获取能匹配到后面表达式 (\d{3}) 的位置。 然后 (?=(\d{3})+) 表示匹配多个三位连在一起的数字的位置。比如:

// eg1
"1234567a789".replace(/(?=(\d{3})+)/, "0") // 0123456a789
// eg2
"1234567a789".replace(/(?=(\d{3})+)/g, "0") // 0102030456a0789

ok! 我们来写个例子测试一下咱们写的这个千位分隔的函数。

var data1 = [123.456789, 123, -123.456789, "000000.1234s567", -0.167321341];
var data2 = [
[0.123479439034, 3],
[93.238108349, 4],
[-13.37421094, 0],
[-123478932789, 4],
[-0.12654, 0]
]
for (var i = 0; i < data1.length; i++) {
console.log("\n" + data1[i] + " ==> ", splitThousands(data1[i]))
}
for (var i = 0; i < data2.length; i++) {
console.log("\n" + data2[i][0] + " 保留 " + data2[i][1] + " 位小数 ==> ",
splitThousands(data2[i][0], data2[i][1]))
}

打印的结果如下:


他想,他的心,就像这个坍塌的洞,昏暗而闷臭,没有人适合住进来;

而他的感情,在人们的眼里,就像刚刚那只老鼠,却在黑暗和污水里,长得膘肥体壮,凶狠的能吃掉一只猫,可依旧见不得光,人人喊打。

一一 俗念亲 《每次跳楼,都看见那厮在铺救生气垫》

js实现千位分隔的更多相关文章

  1. 把一串数字表示成千位分隔形式——JS正则表达式的应用

    梳理思路 要先明白的是,我们将要转换成的数字格式是这样:从个位往左数起,每三位前插入一个千位分隔符,,即可以想象成我们要把每三位数字前面的那个空""匹配出来,并替换成千位分隔符,. ...

  2. 电子科大POJ "整数的千位分隔"

    整数的千位分隔 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) C-source ...

  3. js实现千位符分隔

    前几天面试做保险项目的公司,被问到了一道实现千位符分割方法的题,乍一看挺简单,但做起来最后却没给出来一个合适的解决方法.回来自己琢磨了一个还行的答案. var num = 3899000001, ar ...

  4. js实现千位分隔符——str.replace()用法

    /*js*/function commafy(num){ return num && num.toString().replace(/(\d{1,3})(?=(\d{3})+(?:$| ...

  5. js ---- 实现千位分隔符

    第一种方法: var num = 1234567; var string = num.toString(); var arr = string.split('').reverse(); console ...

  6. 【正则表达式】用js实现千位分隔符,怎么实现?

    (?=pattern)  正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串.这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用.例如,'Windows (?=95|98|NT| ...

  7. 用js实现千位分隔符

    function mm(num) { return num && num .toString() .replace(/(\d)(?=(\d{3})+\.)/g, function($0 ...

  8. js添加千位分隔符

    function thousandBitSeparator(num){ var re=/\d{1,3}(?=(\d{3})+$)/g; var n1=num.toString().replace(/^ ...

  9. 把一串数字表示成千位分隔形式——toLocaleString()

    听说你用什么正则?我这有个骚操作了解下.. toLocaleString() 方法可把一个 Number 对象转换为本地格式的字符串. ().toLocaleString('en-US') " ...

随机推荐

  1. 爬虫IP代理中的http与https

    之前使用代理IP,构造的proxies一直都是http模式 proxies={"http": "http://{}".format(ip)} 但是今天遇到的网站 ...

  2. js中级小知识1

    首先我们复习之前的小知识,本期博客与之前有关 js数据类型 基本数据类型:string    undefined         null         boolean          numbe ...

  3. python语法_while循环_for循环

    while 循环: while 条件: print('''asdasd') print('''asdasd') print('''asdasd') 当条件为True时,持续循环 当条件为Flase时, ...

  4. String类,ThreadLocal

    1,StringBuffer修改缓冲区的方法是同步的            单任务使用StringBuilder更有效 2,replace和replaceAll方法区别 3,spilt方法 a,b,c ...

  5. 洛谷试炼场 - 关卡1-5 - 简单字符串 - (Done)

    P1055 ISBN号码 #include<bits/stdc++.h> using namespace std; string s; ]={','X'}; int main() { ci ...

  6. Cesium调用 WMS 、WMTS 服务

    参考文章地址:Cesium调用 ArcGIS Sever 以及 GeoSever 发布的地图服务 cesium测试示例(包括官方的示例)中   arcgis服务都无法访问了 根据原文找到一个在线的可访 ...

  7. 关于for循环

    1.普通for循环 (遍历数组的索引值(下标),边界可以自己划定) var arr = [10, 20, 30];for(var i=0; i<arr.length; i++) console. ...

  8. jQuery 学习笔记(4)(文本值相关方法、操控CSS方法、位置和尺寸方法)

    1.文本值相关方法 .html() == .innerHTML $("div").html("<span> ...</span>") / ...

  9. Linux下Solr单机版、集群版安装与配置

    一.安装 1.需要的安装包有apache-tomcat-7.0.47.tar.gz.solr-4.10.3.tgz.tgz(jdk自行安装) 这里默认大家已经安装好jdk与tomcat,所以在这里不做 ...

  10. sql server自定义排序

    方法一: 比如需要对SQL表中的字段NAME进行如下的排序:张三(Z)李四(L)王五(W)赵六(Z) 按照sql中的默认排序规则,根据字母顺序(a~z)排,结果为:李四  王五 赵六 张三 自定义排序 ...