2012-10-10 79 views
37

de funciones PHP:equivalente a la función PHP Number_format en jQuery/javascript

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

Mi necesidad: cualquier organismo puede sugerir la funcionalidad equivalente en jQuery/javascript.

Gracias de antemano.

+0

http://stackoverflow.com/questions/1068284/format-numbers-in-javascript –

Respuesta

36

es esto lo que desea obtener?

yourFloatVarHere.toFixed(2); 

voilà.

+0

number_format (número, decimales, dec_point, thousands_sep) –

+14

@MoVod: ¿qué pasa con el número de formato como 1 340.23 o 1.340,00 (nota mil separador)? – zergussino

+0

aFija() redondea el punto decimal cuando es> 5, pero number_format() en php lo hace cuando el punto decimal es> = 5. Tengo un problema en la validación – Annapurna

2

Aquí es una función simple que se puede utilizar para alcanzar casi el mismo resultado de Number_format en php:

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

Otra forma es usar ajax para hacer una llamada a un script php en el que correr Number_format en el número y devolverlo con ajax como una cadena. Pero es un poco complicado.

10

nativo "Internacional" enfoque de objeto:

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/

Más información en: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl

+2

Nota de compatibilidad del navegador: Mobile Safari e IE <11 no son compatibles. No sugerido para usar. – Raptor

34

El mismo equivalente de Number_format en js podemos encontrar here

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

Aunque esto fue publicado hace bastante tiempo, aún así pensé en decir gracias, ¡esta brillante respuesta me salvó el día! –

3

Aquí es otro s solución de hort que debería comportarse como el equivalente de 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:'.'); 
} 
+1

ama este tipo de función corta. pero, debemos forzar 'number' como un número/entero agregando' number = number * 1; 'en la primera línea de la función. porque a veces el navegador lo reconoce como una cadena, y luego la función 'toFixed' no será reconocida (número de función indefinida.aFija()) –

0

Mi opinión sobre esto:

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

Sé que es un viejo hilo, pero he hecho mi propia función, que es en puro 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/

+0

Bueno, funciona genial =) –

Cuestiones relacionadas