Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的formatMoney函数不';行不通_Javascript_Numbers_Format - Fatal编程技术网

Javascript中的formatMoney函数不';行不通

Javascript中的formatMoney函数不';行不通,javascript,numbers,format,Javascript,Numbers,Format,我需要一个函数,可以将数字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

我需要一个函数,可以将数字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.000undefined0“


我做错了什么?

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

var l = value.length;
...
for(i = l;i >= 0;i--){
倒计时从长度索引开始,因为数组是基于零的,所以不存在长度索引

for(i = l;i >= 0;--i){

将索引计数器指定给字符串的长度

var l = value.length;
...
for(i = l;i >= 0;i--){
倒计时从长度索引开始,因为数组是基于零的,所以不存在长度索引

for(i = l;i >= 0;--i){

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

如果你想做的只是取4位数或更大的数字,然后在右边的3位数中加一个点,你可以试一试:

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);
} 
函数格式货币(money){
var moneyString=money.toString();
var moneyLength=moneyString.length;
如果(货币长度<4){
返回0;
}
var dotIndex=货币长度-3;
返回moneyString.substr(0,dotIndex)+“+”+moneyString.substr(dotIndex);
} 

此外,在文章中格式化代码也是一件好事。将代码缩进四个空格。

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

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;
}
如果你想做的只是取4位数或更大的数字,然后在右边的3位数中加一个点,你可以试一试:

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);
} 
函数格式货币(money){
var moneyString=money.toString();
var moneyLength=moneyString.length;
如果(货币长度<4){
返回0;
}
var dotIndex=货币长度-3;
返回moneyString.substr(0,dotIndex)+“+”+moneyString.substr(dotIndex);
} 
此外,在文章中格式化代码也是一件好事。将代码缩进四个空格

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;
}
有几件事:

  • 你用错误的索引倒计时(你从l开始,而不是从l-1开始)
  • 您没有处理任何小于1000的值
  • 您不需要使用计数器变量
    u
    ,只需使用模数学来跟踪三个
  • 有几件事:

  • 你用错误的索引倒计时(你从l开始,而不是从l-1开始)
  • 您没有处理任何小于1000的值
  • 您不需要使用计数器变量
    u
    ,只需使用模数学来跟踪三个
  • 我剪掉了一些部分:

    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;
    }
    
    我剪掉了一些部分:

    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;
    }
    

    你可以这样做:

    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
    

    看到这个

    你可以这样做:

    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
    

    看这个

    OP似乎不是美国人,所以他们转换。而且,在数字上。例如100万是1.000.000,00.Ooh,这是有意义的。感谢澄清。OP似乎不是美国人,所以他们转换。在数字上。例如100万是1.000.000,00.Ooh,这是有意义的。感谢澄清。