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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12820312/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 08:33:46  来源:igfitidea点击:

Equivalent to PHP function number_format in jquery/javascript

phpjavascriptjquery

提问by RONE

PHP Function:

PHP函数:

function formatNumberForDisplay($number, $decimal=0, $decimalSeperator='.', $numberSeperator=',')
{
     return number_format($number, $decimal, $decimalSeperator, $numberSeperator);
}

My need: Can any body suggest me the equivalent functionality in jquery/javascript.

我的需要:任何机构都可以向我建议 jquery/javascript 中的等效功能吗?

采纳答案by MoVod

is this what you'd like to get?

这是你想要的吗?

yourFloatVarHere.toFixed(2);

voilà.

瞧。

回答by Umair Hamid

The same equivalent of number_format in js can found here

可以在此处找到与 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);
}

回答by Ahmed-Anas

Just use toLocaleStringon an integer object.

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

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

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

回答by Artur Beljajev

Native "Intl" object approach:

本机“国际”对象方法:

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

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

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

More information at: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl

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

回答by Vassilis Pallas

I know it's an old thread, but I made my own function, which is in pure Javascript.

我知道这是一个旧线程,但我使用纯 Javascript 编写了自己的函数。

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

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

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

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

回答by Dennis Bohn

Here is another short solution that should behaviour like the php-equivalent.

这是另一个简短的解决方案,它的行为应该类似于 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:'.');
}

回答by Mihai Galan

Closer function to php number_format($number)should be number.toLocaleString('en')of javascript

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

回答by spreadzz

Here is a simple function that you can use to achieve almost the same result of number_format in php:

这是一个简单的函数,您可以使用它来实现与 php 中 number_format 几乎相同的结果:

function number_format(user_input){
    var filtered_number = user_input.replace(/[^0-9]/gi, '');
    var length = filtered_number.length;
    var breakpoint = 1;
    var formated_number = '';

    for(i = 1; i <= length; i++){
        if(breakpoint > 3){
            breakpoint = 1;
            formated_number = ',' + formated_number;
        }
        var next_letter = i + 1;
        formated_number = filtered_number.substring(length - i, length - (i - 1)) + formated_number; 

        breakpoint++;
    }

    return formated_number;
}

Another way is to use ajax to make a call to a php script where you run number_format on the number and return it with ajax as a string. But it`s a bit messy.

另一种方法是使用 ajax 调用一个 php 脚本,在该脚本中对数字运行 number_format 并使用 ajax 作为字符串返回它。不过有点乱。

回答by RDK

It no easy, try to use simple jquery-plugins such as:

这并不容易,尝试使用简单的 jquery-plugins,例如:

jquery-numberformatter

jquery-numberformatter

Jquery-Price-Format

Jquery 价格格式

回答by Максим Калябин

Another variant of exposed examples:

公开示例的另一种变体:

const numberFormat = (value, decimals, decPoint, thousandsSep) => {
    decPoint = decPoint || '.';
    decimals = decimals !== undefined ? decimals : 2;
    thousandsSep = thousandsSep || ' ';

    if (typeof value === 'string') {
        value = parseFloat(value);
    }

    let result = value.toLocaleString('en-US', {
        maximumFractionDigits: decimals,
        minimumFractionDigits: decimals
    });

    let pieces = result.split('.');
    pieces[0] = pieces[0].split(',').join(thousandsSep);

    return pieces.join(decPoint);
};