IT Share you

jquery / javascript의 PHP 함수 number_format과 동일

shareyou 2021. 1. 9. 10:55
반응형

jquery / javascript의 PHP 함수 number_format과 동일


PHP 기능 :

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

내 필요 : 어떤 본문이라도 jquery / javascript에서 동등한 기능을 제안 할 수 있습니까?


이것이 당신이 얻고 싶은 것입니까?

yourFloatVarHere.toFixed(2);

voilà.


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

그냥 사용하는 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})

나는 그것이 오래된 스레드라는 것을 알고 있지만 순수한 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;
}

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


네이티브 "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));

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

자세한 정보 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl


다음은 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:'.');
}

다음은 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;
}

또 다른 방법은 ajax를 사용하여 숫자에서 number_format을 실행하고 ajax를 문자열로 반환하는 PHP 스크립트를 호출하는 것입니다. 그러나 그것은 약간 지저분합니다.


쉽지 않습니다. 다음과 같은 간단한 jquery-plugins를 사용해보십시오.

jquery-numberformatter

Jquery 가격 형식


이것에 대한 나의 견해 :

var number_format = function(num) {
  stringNum = num.toString();
  stringNum = stringNum.split("");
  c = 0;
  if (stringNum.length>3) {
    for (i=stringNum.length; i>-1; i--) {
      if ( (c==3) && ((stringNum.length-i)!=stringNum.length) ) {
        stringNum.splice(i, 0, ",");
        c=0;
      }
      c++
    }
    return stringNum;
  }
  return num;
}

$("body").append(number_format(100000000));

노출 된 예의 또 다른 변형 :

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

다음과 같이 JS 함수를 호출하기 만하면됩니다.

var formattedNumber = number_format(value)

이것은 PHP와 같은 자바 스크립트의 number_format 함수입니다.

function number_format(number) {
    var isFloat = false;
    var main = number;
    var floatValue = '';
    if(number.indexOf('.') != -1) {
        var s = number.split('.');
        main = s[0];
        floatValue = s[1];
        isFloat = true;
    }
    var length = main.length;
    if(length > 3) {
        var format = '';
        var counter = 0;
        for(var i = length - 1; i >= 0; i--) {
            format += main[i];
            counter++;
            if(counter == 3) {
                format += ",";
                counter = 0;
            }
        }
        var r = format.split('').reverse().join('');
        if(isFloat) {
            r += '.' + floatValue;
        }
        return r;
    } else {
        return number;
    }
}

참조 URL : https://stackoverflow.com/questions/12820312/equivalent-to-php-function-number-format-in-jquery-javascript

반응형