js处理千分位分割

Posted 清颖~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js处理千分位分割相关的知识,希望对你有一定的参考价值。

问题:使用js进行千分位分割?
使用正则表达式解决。
参考第三方npm库 thousandify 的源码,梳理了一下,主要方法在thousandify中。

该方法的思想是:正则表达式
1、正则判断输入内容是否为数字。
2、将输入内容以小数点“.”分开,分为整数位和小数位。
3、对于整数位,进行千分位划分。正则判断从末尾开始每三位数前面加逗号分隔符“,”。
4、对小数位,直接截取,默认截取2位。
5、再用小数点将整数位和小数位拼接起来。
到此完成。

   "use strict";

    let toString = Object.prototype.toString;
    let charsetRegExp = /^[\\d\\.]+$/;
    let defaultOption = 
      thousandSeparator: ",", // 千分位分隔符
      decimalSeparator: ".", // 小数分隔符
      decimalDigits: false, // 小数位数量, false表示不特殊处理
    ;
    function isNumber(target) 
      return toString.call(target) === "[object Number]";
    

    function thousandify(amount, option) 
      let parsedAmount = amount + "";
      if (!charsetRegExp.test(parsedAmount)) 
        return amount;
      
      let options = Object.assign(, defaultOption, option),
        decimalSeparator = options.decimalSeparator,// 小数位分隔符
        thousandSeparator = options.thousandSeparator,// 千分位分隔符
        decimalDigits = options.decimalDigits;// 小数位数
      // 将小数部分与整数部分分隔开
      let amountParts = parsedAmount.split(decimalSeparator);
      // 整数部分,从末尾开始每三位数前面插入千分位
      let intPartStr = amountParts[0].replace(/(?!^)(?=(\\d3)+$)/g, thousandSeparator); 
      // 小数部分
      let decimalStr = amountParts[1] || "";
      // 截取小数位数,不处理精度,仅截取
      if (isNumber(decimalDigits)) 
        decimalStr = decimalStr.substr(0, decimalDigits)
      
      return !!decimalStr ? [intPartStr, decimalStr].join(decimalSeparator) : intPartStr;
    

    console.log(thousandify(182918.928,decimalDigits: 2));

效果图:

注:这只是千分位分割,不处理精度(无四舍五入)。

以上是关于js处理千分位分割的主要内容,如果未能解决你的问题,请参考以下文章

价格格式化--小数保留两位,整数部分用千分号分割

js千分位用逗号隔开,全保留小数点后面的数字

OpenERP ODOO 千分位设置

数字的处理方法(保留小数点两位将数字转化为千分位格式)

js实现金额千分位显示

格式金额,默认保留两位小数,并格式化为千分位