本文主要是介绍百度面试题: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(/(?!^)(?=(\d{3})+$)/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}));
效果图:
注:这只是千分位分割,不处理精度(无四舍五入)。
简单的千分位分割方法:
function comma(num) {let source = String(num).split(".");//按小数点分成2部分source[0] = source[0].replace(new RegExp('(\\d)(?=(\\d{3})+$)','ig'),"$1,");//只将整数部分进行都好分割return source.join(".");//再将小数部分合并进来
}
这篇关于百度面试题:js处理千分位分割的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!