面试题:金额的人民币表示方法(每三位数逗号分割),更简单的实现方法?

杜尼卜
  • 11k

遇到的一个笔试题:

var money = 1003450.89
var res = convert(money); // 1,003,450.89

我实现了一种方式,传统思维,感觉有点土,是否有更优雅的实现方法?下面是我的一种解法,期待更多答案。

function convert(money){
    money = money.toString();
    var integer = money.slice(0, money.indexOf(".")); // 1003450
    var decimal = money.slice(money.indexOf(".")); //89
    var integerArray = integer.split("");

    var res = "", m = 1;
    for(var i = integerArray.length - 1; i >= 0; i--){
        res += integerArray[i];
        if(m === 3) {
            m = 0;
            res += ",";
        }
        m++;
    }
    return res.split("").reverse().join("") + decimal;
}
console.log(convert(1003457678770.089));
// 1,003,457,678,770.089
回复
阅读 2k
6 个回答

最简单的方法:

console.log((1003457678770.089).toLocaleString());
var money = 1003450.89;
console.log(money.toString().replace(/(?=\B(?:\d{3})+\b)(\d{3}(?:\.\d+$)?)/g,',$1'));
var money = 1003450.89;
var moneySplit = money.toString().split(".");
var res = moneySplit[0].replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,')+"."+moneySplit[1];
console.log(res); // 1,003,450.89

发现还是这个最好,@熊丸子 链接里找到的感觉最好用的一个,代码量少,还好用

money.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏