Javascript Mil Separador / formato de cadena [duplicado]

Resuelto LostLord asked hace 14 años • 15 respuestas

¿Existe alguna función en Javascript para formatear números y cadenas?

Estoy buscando una forma de separar mil para cadenas o números... (Como String.Format en c#)

LostLord avatar Sep 20 '10 23:09 LostLord
Aceptado

La referencia citada en la respuesta original a continuación era incorrecta. Hay una función incorporada para esto, que es exactamente lo que Kaiser sugiere a continuación:toLocaleString

Entonces puedes hacer:

(1234567.89).toLocaleString('en')              // for numeric input
parseFloat("1234567.89").toLocaleString('en')  // for string input

La función implementada a continuación también funciona, pero simplemente no es necesaria.

(Pensé que tal vez tendría suerte y descubriría que era necesario en 2010, pero no. Según esta referencia más confiable , toLocaleString ha sido parte del estándar desde ECMAScript 3rd Edition [1999], lo que creo que significa que habría sido compatible desde IE 5.5.)


Respuesta original

Según esta referencia, no existe una función integrada para agregar comas a un número. Pero esa página incluye un ejemplo de cómo codificarla usted mismo:

function addCommas(nStr) {
    nStr += '';
    var x = nStr.split('.');
    var x1 = x[0];
    var x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
            x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}

Editar: para ir al revés (convertir cadena con comas en número), puede hacer algo como esto:

parseFloat("1,234,567.89".replace(/,/g,''))
Tim Goodman avatar Sep 20 '2010 16:09 Tim Goodman

Si se trata de localizar separadores de miles, delimitadores y separadores decimales, utilice lo siguiente:

// --> numObj.toLocaleString( [locales [, options] ] )
parseInt( number ).toLocaleString();

Hay varias opciones que puedes usar (e incluso configuraciones regionales con alternativas):

number = 123456.7089;

result  = parseInt( number ).toLocaleString() + "<br>";
result += number.toLocaleString( 'de-DE' ) + "<br>";
result += number.toLocaleString( 'ar-EG' ) + "<br>";
result += number.toLocaleString( 'ja-JP', { 
  style           : 'currency',
  currency        : 'JPY',
  currencyDisplay : 'symbol',
  useGrouping     : true
} ) + "<br>";
result += number.toLocaleString( [ 'jav', 'en' ], { 
  localeMatcher            : 'lookup',
  style                    : 'decimal',
  minimumIntegerDigits     : 2,
  minimumFractionDigits    : 2,
  maximumFractionDigits    : 3,
  minimumSignificantDigits : 2,
  maximumSignificantDigits : 3
} ) + "<br>";

var el = document.getElementById( 'result' );
el.innerHTML = result;
<div id="result"></div>
Expandir fragmento

Detalles en la página de información de MDN .

Editar: El comentarista @Me gusta Serena agrega lo siguiente:

Para admitir navegadores con una configuración regional distinta del inglés donde todavía queremos el formato en inglés, utilice value.toLocaleString('en'). También funciona para punto flotante.

kaiser avatar Nov 07 '2013 16:11 kaiser