0

我需要一个可以将数字 10000 转换为这个数字的函数:10.000。

所以我尝试了以下方法:

function formatMoney(money){
    var value = money.toString();
    var l = value.length;
    var new_value = 0;
    new_value = new_value.toString();
    if(l > 3){
        var moneyarray = value.split('');
        var u = 0;
        for(i = l;i >= 0;i--){
            if(u > 3){
                u = 0;
                new_value = "."+new_value;
            }
            new_value = moneyarray[i]+new_value;
            u++;
        }
    }
    return new_value;
}

然后调用这个:

formatMoney("10000");

但结果是

10.000未定义0"

我做错了什么?

4

5 回答 5

3

您将索引计数器分配给字符串的长度;

var l = value.length;
...
for(i = l;i >= 0;i--){

向下计数从长度索引开始,因为数组是从零开始的,所以不存在。改为预先减去;

for(i = l;i >= 0;--i){
于 2012-10-04T17:17:49.093 回答
0

编辑:忽略这一点,我没有对这个问题给予足够的重视。

如果您要做的只是取 4 位或更大的数字,并在右边的三位数字中添加一个点,您可以试一试:

function formatMoney(money) {
    var moneyString = money.toString();
    var moneyLength = moneyString.length;

    if(moneyLength < 4) {
        return 0;
    }

    var dotIndex = moneyLength - 3;
    return moneyString.substr(0, dotIndex) + "." + moneyString.substr(dotIndex);
} 

此外,在帖子中格式化您的代码也是一件好事。全部缩进四个空格。

于 2012-10-04T17:25:28.797 回答
0
function formatMoney(money){
    var value = money.toString();
    var l = value.length;
    var new_value = 0;
    new_value = new_value.toString();
    if(l > 3){
        var moneyarray = value.split('');
        for(var i = l-1;i >= 0;i--){
            if((l-i)%3 === 0){
                new_value = "."+new_value;
            }
            new_value = moneyarray[i]+new_value;
        }
    } else {
        new_value = value;
    }
    return new_value;
}

有几件事:

  1. 你用错误的索引倒计时(你从 l 开始,而不是 l-1)
  2. 您没有处理任何小于 1000 的值
  3. 您不需要使用计数器变量u,您只需使用模数学来跟踪三分之二。
于 2012-10-04T17:26:14.267 回答
0

我剪掉了一些部分:

function formatMoney(money) {
    var value = money.toString();
    var l = value.length;
    var new_value = "";
    if (l > 3) {
        var u = 0;
        for (i = l-1;i >= 0;i--) {
            if (u == 3) {
                u = 0;
                new_value = "." + new_value;
            }
            new_value = value[i]+new_value;
            u++;
        }
    }
    return new_value;
}
于 2012-10-04T17:29:30.400 回答
0

你可以这样做:

function money(m) {
  m = m.toString().split('');
  for (var i = m.length - 3; i > 0; i -= 3)
      m.splice(i,0,".");
 return m.join('');
}

 console.log(money(1000000)); // "1.000.000

看到这个JsBin

于 2012-10-04T17:41:00.260 回答