在以前,我一直都是利用正则表达式进行手动插入千分位,比如,写了个这样的方法(注释比较详细):
function format_number_thousandth(number){
number = number.toString();// 强制转换为字符串
reg = /^[\-\+]?((\d+)([\.,](\d{3}))*([\.](\d+))?|([\.,](\d+))?)$/;// 正则
dh = ",";// 千分符
dh_reg = new RegExp(dh);
while (dh_reg.test(number)) {
number = number.replace(dh_reg, "");// 检测是否包含千分符,如果有,先去除
}
if (!reg.test(number)) {
console.log("您输入的可能不是数字");
return number;// 如果传值不是数字,则原样返回
}
number = number.replace(/^(\d*)$/, "$1.");// 整数加上小数点
number = (number + "00").replace(/(\d+)(\.\d\d)\d+/, "$1$2");//
number = number.replace(".", dh);// 将小数点替换为千分符
//var re = /(\d)(\d{3},)/;
var reg_insert = new RegExp("(\\d)(\\d{3}" + dh + ")");// 从小数点(已替换为千分符)前,每三位数插入一个千分符
while (reg_insert.test(number)) {
number = number.replace(reg_insert, "$1" + dh + "$2");// 循环插入千分符
}
var pointIndex = number.lastIndexOf(dh);// 找到小数点的坐标
var int = number.substr(0, pointIndex);// 整数部分
var float = number.substr(pointIndex).replace(dh_reg, ".");// 小数部分,并还原小数点为"."
number = int + float;
return number;
}
直到最近,才发现有这么一个方法,一句代码即可实现,她就是Number.prototype.toLocaleString(),她不仅可以插入千分位,还可以格式化为货币格式,并可以根据设定参数格式化出不同国别的货币格式,而且会自动的采用四舍五入法保留两位小数,是不是很方便呢,下面我们来看看应该怎么来使用她吧。
语法:numObj.toLocaleString([locales , options])
参数:
示例:
(12345.564).toLocaleString('zh-CN', {style: 'currency', currency: 'CNY'})
// 执行结果"¥12,345.56"
(12345.568).toLocaleString('zh-CN', {style: 'currency', currency: 'CNY'})
// 执行结果"¥12,345.57"
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:Yiiven https://cloud.tencent.com/developer/article/2193127