相当于jquery/javascript中的PHP函数number_format

RON*_*ONE 57 javascript php jquery

PHP功能:

function formatNumberForDisplay($number, $decimal=0, $decimalSeperator='.', $numberSeperator=',')
{
     return number_format($number, $decimal, $decimalSeperator, $numberSeperator);
}
Run Code Online (Sandbox Code Playgroud)

我的需要:任何身体都可以建议我在jquery/javascript中的等效功能.

提前致谢.

Uma*_*mid 70

可以在此处找到js中相同的number_format

function number_format (number, decimals, dec_point, thousands_sep) {
    // Strip all characters but numerical ones.
    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    // Fix for IE parseFloat(0.55).toFixed(0) = 0;
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}
Run Code Online (Sandbox Code Playgroud)

  • 即使这是很久以前发布的,我仍然认为我会说谢谢 - 这个精彩的答案救了我的一天! (9认同)

MoV*_*Vod 40

这是你想要的吗?

yourFloatVarHere.toFixed(2);
Run Code Online (Sandbox Code Playgroud)

瞧.

  • @MoVod:格式化数字如1 340.23或1,340.00(注意千位分隔符)怎么样? (20认同)
  • 不幸的是,这甚至不能完成PHP [number_format()](http://php.net/manual/en/function.number-format.php)的一半工作. (14认同)
  • toFixed() 在小数点 &gt;5 时四舍五入,但 php 中的 number_format() 在小数点 &gt;=5 时四舍五入。我在验证时遇到问题 (3认同)
  • 不足的。如果你运行 `(95**12).toFixed(0)` 你会得到 `"5.40360087662637e+23"`,但是如果你在 php 中运行 `number_format(95**12,0)` 你会得到 `540,360,087,662,636,990,201,856` (2认同)

Ahm*_*nas 29

只需toLocaleString在整数对象上使用.

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString#Browser_compatibility

let x = 1234567;
//if x is a string/non-number, use parseInt/parseFloat to convert to a number. Thanks @Aleksandr Kopelevich
x.toLocaleString('us', {minimumFractionDigits: 2, maximumFractionDigits: 2})
Run Code Online (Sandbox Code Playgroud)

  • 这应该是正确的答案.但只有一件事:这个函数不适用于字符串.因此,如果直接从JSON对象获取值(例如),请将parseInt()或parseFloat()应用于此字符串. (7认同)

Art*_*jev 11

原生"Intl"对象方法:

var amount = 5000.25;
var locale = 'de';
var options = {style: 'currency', currency: 'eur', minimumFractionDigits: 2, maximumFractionDigits: 2};
var formatter = new Intl.NumberFormat(locale, options);

console.log(formatter.format(amount));
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/arturrelax/sa9jL138/1/

更多信息,访问:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl

  • 浏览器兼容性说明:不支持Mobile Safari和IE <11.不建议使用. (2认同)

Vas*_*las 11

我知道这是一个旧线程,但我创建了自己的函数,这是纯粹的Javascript.

https://gist.github.com/VassilisPallas/d73632e9de4794b7dd10b7408f7948e8

function number_format(number, decimals, dec_point, thousands_point) {

    if (number == null || !isFinite(number)) {
        throw new TypeError("number is not valid");
    }

    if (!decimals) {
        var len = number.toString().split('.').length;
        decimals = len > 1 ? len : 0;
    }

    if (!dec_point) {
        dec_point = '.';
    }

    if (!thousands_point) {
        thousands_point = ',';
    }

    number = parseFloat(number).toFixed(decimals);

    number = number.replace(".", dec_point);

    var splitNum = number.split(dec_point);
    splitNum[0] = splitNum[0].replace(/\B(?=(\d{3})+(?!\d))/g, thousands_point);
    number = splitNum.join(dec_point);

    return number;
}
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/htyxfra9/2/

  • 发现一个错误:如果你在函数中运行 ```number_format(95**12,0)``` ,你会得到 `"5.40360087662637e+23"`,但是如果你在 php 中运行它,你会得到 `"540,360,087,662,636,990,201,856"` (2认同)

Mih*_*lan 10

更接近 php 的函数number_format($number)应该是number.toLocaleString('en')javascript

  • 这是一个很好的建议。为了更进一步,我将向其中添加 parseInt(): parseInt(data).toLocaleString('en'); (2认同)

小智 5

这是另一个简短的解决方案,它的行为应该类似于 php 等效项。

function number_format(number,decimals,dec_point,thousands_sep) {
    number  = number*1;//makes sure `number` is numeric value
    var str = number.toFixed(decimals?decimals:0).toString().split('.');
    var parts = [];
    for ( var i=str[0].length; i>0; i-=3 ) {
        parts.unshift(str[0].substring(Math.max(0,i-3),i));
    }
    str[0] = parts.join(thousands_sep?thousands_sep:',');
    return str.join(dec_point?dec_point:'.');
}
Run Code Online (Sandbox Code Playgroud)

  • 喜欢这种简短的功能。但是,我们必须通过在函数的第一行添加 `number = number*1;` 来强制 `number` 为数字/整数。因为有时浏览器会将其识别为字符串,然后将无法识别`toFixed`函数(未定义的函数编号.toFixed()) (2认同)