JavaScript中的数字格式类似于C

JavaScript中的数字格式类似于C,javascript,jquery,format,numbers,Javascript,Jquery,Format,Numbers,是否有一种简单的方法可以在JavaScript中格式化数字,类似于C或VB.NET中通过ToString格式提供程序或String.format提供的格式化方法?通常 在jQuery中 一个不错的数字格式化程序和输入助手,支持jquery1.5的语言环境+ Java和的客户端实现 大体上 在jQuery中 一个不错的数字格式化程序和输入助手,支持jquery1.5的语言环境+ Java和的客户端实现 首先,在JS中将整数转换为字符串非常简单: // Start off with a number

是否有一种简单的方法可以在JavaScript中格式化数字,类似于C或VB.NET中通过ToString格式提供程序或String.format提供的格式化方法?

通常

在jQuery中

一个不错的数字格式化程序和输入助手,支持jquery1.5的语言环境+ Java和的客户端实现 大体上

在jQuery中

一个不错的数字格式化程序和输入助手,支持jquery1.5的语言环境+ Java和的客户端实现
首先,在JS中将整数转换为字符串非常简单:

// Start off with a number
var number = 42;
// Convert into a string by appending an empty (or whatever you like as a string) to it
var string = 42+'';
// No extra conversion is needed, even though you could actually do
var alsoString = number.toString();
如果将数字作为字符串并希望将其转换为整数,则必须将parseIntstring用于整数,将parseFloatstring用于浮点数。然后,这两个函数都返回所需的整数/浮点。例如:

// Start off with a float as a string
var stringFloat = '3.14';
// And an int as a string
var stringInt = '42';

// typeof stringInt  would give you 'string'

// Get the real float from the string
var realFloat = parseFloat(someFloat);
// Same for the int
var realInt = parseInt(stringInt);

// but typeof realInt  will now give you 'number'

从你的问题来看,我还不清楚你到底想添加什么。首先,在JS中将整数转换为字符串非常简单:

// Start off with a number
var number = 42;
// Convert into a string by appending an empty (or whatever you like as a string) to it
var string = 42+'';
// No extra conversion is needed, even though you could actually do
var alsoString = number.toString();
如果将数字作为字符串并希望将其转换为整数,则必须将parseIntstring用于整数,将parseFloatstring用于浮点数。然后,这两个函数都返回所需的整数/浮点。例如:

// Start off with a float as a string
var stringFloat = '3.14';
// And an int as a string
var stringInt = '42';

// typeof stringInt  would give you 'string'

// Get the real float from the string
var realFloat = parseFloat(someFloat);
// Same for the int
var realInt = parseInt(stringInt);

// but typeof realInt  will now give you 'number'

从你的问题来看,我还不清楚你到底想在etc后面加什么。

这里有一个简单的JS函数,可以将逗号添加到字符串格式的整数中。它将处理整数或十进制数。您可以传递数字或字符串。它显然返回一个字符串

function addCommas(str) {
    var parts = (str + "").split("."),
        main = parts[0],
        len = main.length,
        output = "",
        first = main.charAt(0),
        i;

    if (first === '-') {
        main = main.slice(1);
        len = main.length;    
    } else {
        first = "";
    }
    i = len - 1;
    while(i >= 0) {
        output = main.charAt(i) + output;
        if ((len - i) % 3 === 0 && i > 0) {
            output = "," + output;
        }
        --i;
    }
    // put sign back
    output = first + output;
    // put decimal part back
    if (parts.length > 1) {
        output += "." + parts[1];
    }
    return output;
}
下面是一组测试用例:

您可以看到它在前面的JSFIDLE中使用。通过简单的谷歌搜索javascript添加逗号,您也可以找到处理十进制数的函数

将数字转换为字符串有多种方法。最简单的方法是将其添加到字符串中:

var myNumber = 3;
var myStr = "" + myNumber;   // "3"
在JSFIDLE的上下文中,您可以通过更改以下行在计数器中输入逗号:

jTarget.text(current);
为此:

jTarget.text(addCommas(current));

您可以看到它在这里工作:

这里有一个简单的JS函数,可以将逗号添加到字符串格式的整数中。它将处理整数或十进制数。您可以传递数字或字符串。它显然返回一个字符串

function addCommas(str) {
    var parts = (str + "").split("."),
        main = parts[0],
        len = main.length,
        output = "",
        first = main.charAt(0),
        i;

    if (first === '-') {
        main = main.slice(1);
        len = main.length;    
    } else {
        first = "";
    }
    i = len - 1;
    while(i >= 0) {
        output = main.charAt(i) + output;
        if ((len - i) % 3 === 0 && i > 0) {
            output = "," + output;
        }
        --i;
    }
    // put sign back
    output = first + output;
    // put decimal part back
    if (parts.length > 1) {
        output += "." + parts[1];
    }
    return output;
}
下面是一组测试用例:

您可以看到它在前面的JSFIDLE中使用。通过简单的谷歌搜索javascript添加逗号,您也可以找到处理十进制数的函数

将数字转换为字符串有多种方法。最简单的方法是将其添加到字符串中:

var myNumber = 3;
var myStr = "" + myNumber;   // "3"
在JSFIDLE的上下文中,您可以通过更改以下行在计数器中输入逗号:

jTarget.text(current);
为此:

jTarget.text(addCommas(current));

您可以看到它在这里工作:

是的,有一种方法可以在javascript中正确设置数字格式,例如:

var val=2489.8237

val.toFixed(3) //returns 2489.824 (round up)
val.toFixed(2) //returns 2489.82
val.toFixed(7) //returns 2489.8237000 (padding)
var flt = '5.99';
var nt = '6';

var rflt = parseFloat(flt);
var rnt = parseInt(nt);
使用variablename.toFixed

还有一个函数用于精度。 有关更多详细信息,您还可以访问


是的,确实有一种方法可以在javascript中正确设置数字格式,例如:

var val=2489.8237

val.toFixed(3) //returns 2489.824 (round up)
val.toFixed(2) //returns 2489.82
val.toFixed(7) //returns 2489.8237000 (padding)
var flt = '5.99';
var nt = '6';

var rflt = parseFloat(flt);
var rnt = parseInt(nt);
使用variablename.toFixed

还有一个函数用于精度。 有关更多详细信息,您还可以访问

使用JQuery

使用JQuery


如果不想使用jQuery,请查看

如果不想使用jQuery,请查看

例如:

var val=2489.8237

val.toFixed(3) //returns 2489.824 (round up)
val.toFixed(2) //returns 2489.82
val.toFixed(7) //returns 2489.8237000 (padding)
var flt = '5.99';
var nt = '6';

var rflt = parseFloat(flt);
var rnt = parseInt(nt);
例如:

var val=2489.8237

val.toFixed(3) //returns 2489.824 (round up)
val.toFixed(2) //returns 2489.82
val.toFixed(7) //returns 2489.8237000 (padding)
var flt = '5.99';
var nt = '6';

var rflt = parseFloat(flt);
var rnt = parseInt(nt);
:

简短、快速、灵活但独立。仅75行,包括MIT许可证信息、空行和注释。 接受标准数字格式,如0.00或带否定-000。。 接受任何国家/地区格式,如0,00,,'。或任何类型的非编号符号。 接受任意数字分组,,0.000或0。都是有效的。 接受任何冗余/傻瓜式格式,,。或0,00.0都可以。 自动数字舍入。 简单的界面,只需提供如下掩码和值:格式0.0000,3.141592 更新

正如TomášZato在这里所说的,一行解决方案:

(666.0).toLocaleString()
numObj.toLocaleString([locales [, options]])
ECMA-262 5.1版中描述的:

并且将在未来版本的浏览器中工作…

简短、快速、灵活但独立。仅75行,包括MIT许可证信息、空行和注释。 接受标准数字格式,如0.00或带否定-000。。 接受任何国家/地区格式,如0,00,,'。或任何类型的非编号符号。 接受任意数字分组,,0.000或0。都是有效的。 接受任何冗余/傻瓜式格式,,。或0,00.0都可以。 自动数字舍入。 简单的界面,只需提供如下掩码和值:格式0.0000,3.141592 更新

正如TomášZato在这里所说的,一行解决方案:

(666.0).toLocaleString()
numObj.toLocaleString([locales [, options]])
ECMA-262 5.1版中描述的:


并且将在未来版本的浏览器中工作…

这里是另一个版本:

$.fn.digits = function () {
    return this.each(function () {
        var value = $(this).text();
        var decimal = "";
        if (value) {
            var pos = value.indexOf(".");
            if (pos >= 0) {
                decimal = value.substring(pos);
                value = value.substring(0, pos);
            }
            if (value) {
                value = value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
                if (!String.isNullOrEmpty(decimal)) value = (value + decimal);
                $(this).text(value);
            }
        }
        else {
            value = $(this).val()
            if (value) {
                var pos = value.indexOf(".");
                if (pos >= 0) {
                    decimal = value.substring(pos);
                    value = value.substring(0, pos);
                }
                if (value) {
                    value = value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
                    if (!String.isNullOrEmpty(decimal)) value = (value + decimal);
                    $(this).val(value);
                }
            }
        }
    })
};

以下是另一个版本:

$.fn.digits = function () {
    return this.each(function () {
        var value = $(this).text();
        var decimal = "";
        if (value) {
            var pos = value.indexOf(".");
            if (pos >= 0) {
                decimal = value.substring(pos);
                value = value.substring(0, pos);
            }
            if (value) {
                value = value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
                if (!String.isNullOrEmpty(decimal)) value = (value + decimal);
                $(this).text(value);
            }
        }
        else {
            value = $(this).val()
            if (value) {
                var pos = value.indexOf(".");
                if (pos >= 0) {
                    decimal = value.substring(pos);
                    value = value.substring(0, pos);
                }
                if (value) {
                    value = value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
                    if (!String.isNullOrEmpty(decimal)) value = (value + decimal);
                    $(this).val(value);
                }
            }
        }
    })
};

要获得逗号后有2个数字的十进制数,可以使用:

function nformat(a) {
   var b = parseInt(parseFloat(a)*100)/100;
   return b.toFixed(2);
}

要获得逗号后有2个数字的十进制数,可以使用:

function nformat(a) {
   var b = parseInt(parseFloat(a)*100)/100;
   return b.toFixed(2);
}

这里有一些解决方案,都通过了测试套件,包括测试套件和基准测试,如果你想合作的话 用py和paste进行测试,然后重试

方法0 RegExp 基于,但如果没有小数点则修复

if (typeof Number.prototype.format === 'undefined') {
    Number.prototype.format = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('.');
        a[0] = a[0].replace(/\d(?=(\d{3})+$)/g, '$&,');
        return a.join('.');
    }
}
方法1 方法3回路 实例 测试套件 基准
这里有一些解决方案,都通过了测试套件,包括测试套件和基准测试,如果您想复制并粘贴到测试中,请尝试

方法0 RegExp 基于,但如果没有小数点则修复

if (typeof Number.prototype.format === 'undefined') {
    Number.prototype.format = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('.');
        a[0] = a[0].replace(/\d(?=(\d{3})+$)/g, '$&,');
        return a.join('.');
    }
}
方法1 方法3循环 实例 测试套件 基准
我写了一个简单的函数,还不需要另一个jQuery插件!!将数字转换为十进制分隔字符串或空字符串(如果该数字不是以数字开头):

function format(x) {
    return isNaN(x)?"":x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
578999;结果为578999

格式10;结果是10

如果希望使用小数点而不是逗号,只需将代码中的逗号替换为小数点即可

其中一条评论正确地指出,这只适用于整数,通过一些小的调整,您也可以使其适用于浮点:

function format(x) {
    if(isNaN(x))return "";

    n= x.toString().split('.');
    return n[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")+(n.length>1?"."+n[1]:"");
}

我写了一个简单的函数,还不需要另一个jQuery插件!!将数字转换为十进制分隔字符串或空字符串(如果该数字不是以数字开头):

function format(x) {
    return isNaN(x)?"":x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
578999;结果为578999

格式10;结果是10

如果希望使用小数点而不是逗号,只需将代码中的逗号替换为小数点即可

其中一条评论正确地指出,这只适用于整数,通过一些小的调整,您也可以使其适用于浮点:

function format(x) {
    if(isNaN(x))return "";

    n= x.toString().split('.');
    return n[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")+(n.length>1?"."+n[1]:"");
}

我做了一个简单的函数,也许有人可以使用它

function secsToTime(secs){
  function format(number){
    if(number===0){
      return '00';
    }else {
      if (number < 10) {
          return '0' + number
      } else{
          return ''+number;
      }
    }
  }

  var minutes = Math.floor(secs/60)%60;
  var hours = Math.floor(secs/(60*60))%24;
  var days = Math.floor(secs/(60*60*24));
  var seconds = Math.floor(secs)%60;

  return (days>0? days+"d " : "")+format(hours)+':'+format(minutes)+':'+format(seconds);
}
这可以产生以下输出:

5d 02:53:39 4d 22:15:16 03:01:05 00:00:00
我做了一个简单的函数,也许有人可以使用它

function secsToTime(secs){
  function format(number){
    if(number===0){
      return '00';
    }else {
      if (number < 10) {
          return '0' + number
      } else{
          return ''+number;
      }
    }
  }

  var minutes = Math.floor(secs/60)%60;
  var hours = Math.floor(secs/(60*60))%24;
  var days = Math.floor(secs/(60*60*24));
  var seconds = Math.floor(secs)%60;

  return (days>0? days+"d " : "")+format(hours)+':'+format(minutes)+':'+format(seconds);
}
这可以产生以下输出:

5d 02:53:39 4d 22:15:16 03:01:05 00:00:00
若您想为视图而非计算设置数字格式,可以使用

function numberFormat( number ){

    var digitCount = (number+"").length;
    var formatedNumber = number+"";
    var ind = digitCount%3 || 3;
    var temparr = formatedNumber.split('');

    if( digitCount > 3 && digitCount <= 6 ){

        temparr.splice(ind,0,',');
        formatedNumber = temparr.join('');

    }else if (digitCount >= 7 && digitCount <= 15) {
        var temparr2 = temparr.slice(0, ind);
        temparr2.push(',');
        temparr2.push(temparr[ind]);
        temparr2.push(temparr[ind + 1]);
        // temparr2.push( temparr[ind + 2] ); 
        if (digitCount >= 7 && digitCount <= 9) {
            temparr2.push(" million");
        } else if (digitCount >= 10 && digitCount <= 12) {
            temparr2.push(" billion");
        } else if (digitCount >= 13 && digitCount <= 15) {
            temparr2.push(" trillion");

        }
        formatedNumber = temparr2.join('');
    }
    return formatedNumber;
}
输入:{Integer}个数

输出:{String}编号

22870=>如果数字为22870

22,87百万=>如果数字2287XXXXX可以是任何数字

2287亿=>如果数字为2287xxxxxxx

22,87万亿=>如果数字为2287xxxxxxxxx


您得到了这个想法

如果您想为查看而不是计算设置数字格式,您可以使用这个

function numberFormat( number ){

    var digitCount = (number+"").length;
    var formatedNumber = number+"";
    var ind = digitCount%3 || 3;
    var temparr = formatedNumber.split('');

    if( digitCount > 3 && digitCount <= 6 ){

        temparr.splice(ind,0,',');
        formatedNumber = temparr.join('');

    }else if (digitCount >= 7 && digitCount <= 15) {
        var temparr2 = temparr.slice(0, ind);
        temparr2.push(',');
        temparr2.push(temparr[ind]);
        temparr2.push(temparr[ind + 1]);
        // temparr2.push( temparr[ind + 2] ); 
        if (digitCount >= 7 && digitCount <= 9) {
            temparr2.push(" million");
        } else if (digitCount >= 10 && digitCount <= 12) {
            temparr2.push(" billion");
        } else if (digitCount >= 13 && digitCount <= 15) {
            temparr2.push(" trillion");

        }
        formatedNumber = temparr2.join('');
    }
    return formatedNumber;
}
输入:{Integer}个数

输出:{String}编号

22870=>如果数字为22870

22,87百万=>如果数字2287XXXXX可以是任何数字

2287亿=>如果数字为2287xxxxxxx

22,87万亿=>如果数字为2287xxxxxxxxx


你得到了这个想法

为了进一步了解jfriend00的答案,我没有足够的观点发表评论,我将他/她的答案扩展到以下几点:

函数logargs{ var-str=; 对于变量i=0;i=0{ 输出=main.charAti+输出; 如果len-i%3===0&&i>0{ 输出=,+输出; } -一,; } //把牌子放回去 输出=第一个+输出; //放回小数部分 如果零件长度>1{ 输出+=.+部件[1]; } 返回输出; } var测试用例=[ 1, 12, 123, -1234, 12345, 123456, -1234567, 12345678, 123456789, -1.1, 12.1, 123.1, 1234.1, -12345.1, -123456.1, -1234567.1, 12345678.1, 123456789.1 ]; 对于var i=0;i}*/ 为了进一步了解jfriend00的回答,我没有足够的观点发表评论,我将他/她的回答扩展到以下几点:

函数logargs{ var-str=; 对于变量i=0;i=0{ 输出=main.charAti+输出; 如果len-i%3===0&&i>0{ 输出=,+输出; } -一,; } //把牌子放回去 输出=第一个+输出; //放回小数部分 如果零件长度>1{ 输出+=.+部件[1]; } 返回输出; } var测试用例=[ 1, 12, 123, -1234, 12345, 123456, -1234567, 12345678, 123456789, -1.1, 12.1, 123.1, 1234.1, -12345.1, -123456.1, -1234567.1, 12345678.1, 123456789.1 ]; 对于var i=0;i}*/ 我建议使用基于区域设置的格式和一般情况。这两种方法的结合取决于用例,可能会有所帮助。

我建议使用基于区域设置的格式和一般情况。这两种方法的结合取决于用例。您可以通过以下方式进行: 因此,您不仅可以格式化数字,还可以将要显示的小数位数作为参数传递,您可以设置自定义小数和英里分隔符

function format(number, decimals = 2, decimalSeparator = '.', thousandsSeparator = ',') {
    const roundedNumber = number.toFixed(decimals);
    let integerPart = '', fractionalPart = '';
    if (decimals == 0) {
        integerPart = roundedNumber;
        decimalSeparator = '';
    } else {
        let numberParts = roundedNumber.split('.');
        integerPart = numberParts[0];
        fractionalPart = numberParts[1];
    }
    integerPart = integerPart.replace(/(\d)(?=(\d{3})+(?!\d))/g, `$1${thousandsSeparator}`);
    return `${integerPart}${decimalSeparator}${fractionalPart}`;
}
使用:


您可以通过以下方式执行此操作: 因此,您不仅可以格式化数字,还可以将要显示的小数位数作为参数传递,您可以设置自定义小数和英里分隔符

function format(number, decimals = 2, decimalSeparator = '.', thousandsSeparator = ',') {
    const roundedNumber = number.toFixed(decimals);
    let integerPart = '', fractionalPart = '';
    if (decimals == 0) {
        integerPart = roundedNumber;
        decimalSeparator = '';
    } else {
        let numberParts = roundedNumber.split('.');
        integerPart = numberParts[0];
        fractionalPart = numberParts[1];
    }
    integerPart = integerPart.replace(/(\d)(?=(\d{3})+(?!\d))/g, `$1${thousandsSeparator}`);
    return `${integerPart}${decimalSeparator}${fractionalPart}`;
}
使用:




警告一句:我用v1.1.0尝试过的您链接到的jQuery数字格式化程序已经完全损坏,没有任何用处。例如:它根本不起作用。这里有一个不错的格式插件:@Tomalak,你应该把它作为一个答案发布。这绝对是我使用过的最好的数字格式化程序插件。我希望在单元测试之外有文档。@Tomalak这永远不会太晚。一年多后,我看到了这一点!差不多三年后的我!autoNumeric功能非常全面,最近更新为1.8.0。警告一句:我在v1.1.0中尝试使用的您链接到的jQuery数字格式化程序已完全损坏且无用。例如:它根本不起作用。这里有一个不错的格式插件:@Tomalak,你应该把它作为一个答案发布。这绝对是我使用过的最好的数字格式化程序插件。我希望在单元测试之外有文档。@Tomalak这永远不会太晚。一年多后,我看到了这一点!差不多三年后的我!autoNumeric功能非常全面,最近更新为1.8.0。谢谢。您是否在JSFIDLE上查看了我的代码?我基本上理解了如何将整数转换为字符串——但我不理解,因为我还不是很精通js,而是如何在我使用的脚本上下文中进行转换。有进一步的见解吗?@blackessej我不明白昏迷后需要补充什么。如果只是计数,我建议使用float,如果你想要2个小数位,你可以简单地每次将数字增加0.01,而不是1。你真的必须忍受我-我不知道如何在我的代码中将我的数字转换为字符串。请确保使用parseInt…,10,确保使用了基数10。这不是问题的答案。他要我把XXXXXXX.YYYY变成X,XXX,XXX.YYYY。谢谢你。您是否在JSFIDLE上查看了我的代码?我基本上理解了如何将整数转换为字符串——但我不理解,因为我还不是很精通js,而是如何在我使用的脚本上下文中进行转换。有进一步的见解吗?@blackessej我不明白昏迷后需要补充什么。如果只是计数,我建议使用float,如果你想要2个小数位,你可以简单地每次将数字增加0.01,而不是1。你真的必须忍受我-我不知道如何在我的代码中将我的数字转换为字符串。请确保使用parseInt…,10,确保使用了基数10。这不是问题的答案。他想让我把XXXXXXX.YYYY变成X,XXX,三十、 YYYY.@blackessej-我在回答的末尾添加了更多内容,说明了如何将addCommas添加到小提琴中。在addCommas函数中添加了对十进制数的支持,使其适用于小数部分的数字。负数不太受欢迎:@Kristopher-我添加了对负数的支持。非常好。我现在正在使用它。@blackessej-我在回答的末尾添加了更多内容,说明了如何将addCommas添加到小提琴中。在addCommas函数中添加了对十进制数的支持,因此它适用于小数部分的数字。负数不太受欢迎:@Kristopher-我添加了对负数的支持。非常好。我现在使用这个。因为我不想在我只需要一个简单函数的时候使用库…?那个简单函数:?我想-是的,60行代码。你说得很对,我想。那是因为事情是否简单是意见的问题。在意见中没有绝对的真理给我们机会进行无休止的争论。这是如此,你的行为在SO用户中是典型的。看来你真的准备好对我的评论大发雷霆了。你不知道吗
还有更好的事要做吗?无论如何,一行的跨国代码是6666.0.toLocaleString。如果你意识到这样的评论离题,可能会消失,那么你可以随意称呼任何行为。也请停止试图让我放弃你的帖子。你注定要失败,因为我没有投反对票。。。我在反对票上加了评论。因为我不想在我只需要一个简单函数的时候使用库…?那个简单函数:?我想-是的,60行代码。你说得很对,我想。那是因为事情是否简单是意见的问题。在意见中没有绝对的真理给我们机会进行无休止的争论。这是如此,你的行为在SO用户中是典型的。看来你真的准备好对我的评论大发雷霆了。你没有更好的事要做吗?无论如何,一行的跨国代码是6666.0.toLocaleString。如果你意识到这样的评论离题,可能会消失,那么你可以随意称呼任何行为。也请停止试图让我放弃你的帖子。你注定要失败,因为我没有投反对票。。。我在下行表决前添加了注释。如果您先拆分浮点部分,然后对整数执行此操作,然后再次添加浮点部分,那么它应该也适用于fp的s412.8。替换/\B?=\d{3}+\d/g,;返回412.8。我认为它可能会返回412.80如果你先拆分浮点部分,然后对整数执行此操作,然后再次添加浮点部分,那么它应该也适用于fp的412.8.replace/\B?=\d{3}+\d/g,;返回412.8。我想它可能会返回412.80你应该看看JQuery NUMBERFORMATTER插件:这个问题:@Darhuuk,其中3260万是可怕的…你应该看看JQuery NUMBERFORMATTER插件:这个问题:@Darhuuk,其中3260万是可怕的。。。