在以前,我一直都是利用正则表达式进行手动插入千分位,比如,写了个这样的方法(注释比较详细):

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]])

参数:

  • locales:可选,语言代码,例如:中国的代码zh-CN
  • options:可选. 这是个比较庞大的体系,这里就简单说说我们可能会用到的
    • style – 格式化时使用的样式.可选值有“decimal” – 纯数字格式 , “currency” – 货币格式, “percent” – 百分比格式; 默认值 “decimal”
    • currency – 在货币格式化中使用的货币符号. 可能的值是ISO的货币代码,如:人民币 – CNY
    • useGrouping – 是否使用分组分隔符,如千/万/亿分隔符,可选值true – 使用,false – 不使用,默认值”true”
    • minimumFractionDigits – 要保留的小数最小位数,可选值0-20,默认值”2″
    • maximumFractionDigits – 要保留的小数最大位数,可选值0-20,默认值minimumFractionDigits

示例:

(12345.564).toLocaleString('zh-CN', {style: 'currency', currency: 'CNY'})
// 执行结果"¥12,345.56"
(12345.568).toLocaleString('zh-CN', {style: 'currency', currency: 'CNY'})
// 执行结果"¥12,345.57"

更详细的用法,可以参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

发表评论

电子邮件地址不会被公开。 必填项已用*标注