Javascript Séparateur de Milliers / format de chaîne de caractères

Existe-t-il une fonction en Javascript pour formater le nombre et les chaînes de caractères ?

je cherche un moyen pour mille séparateur pour chaîne ou des nombres... (Comme String.Format en c#)

63
demandé sur Josh Stodola 2010-09-20 20:35:04

12 réponses

mise à Jour (7 ans plus tard)

la référence citée dans la réponse originale ci-dessous était erronée. Il est une fonction intégrée pour cela, qui est exactement ce que kaiser suggère ci-dessous: toLocaleString

, de Sorte que vous pouvez faire:

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

la fonction implémentée ci-dessous fonctionne aussi, mais n'est tout simplement pas nécessaire.

(je pensais peut-être que je serais chanceux et découvrir que était nécessaire en 2010, mais non. Selon ce référence plus fiable , toLocaleString a fait partie de la norme depuis ECMAScript 3e édition [1999], qui, je crois signifie qu'il aurait été pris en charge aussi loin que IE 5.5.)


Réponse Originale

selon ce référence il n'y a pas de fonction intégrée pour ajouter des virgules à un nombre. Mais cette page contient un exemple de code vous-même:

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, '' + ',' + '');
    }
    return x1 + x2;
}

Edit: Pour aller dans l'autre sens (convertir la chaîne avec des virgules en nombre), vous pourriez faire quelque chose comme ceci:

parseFloat("1,234,567.89".replace(/,/g,''))
75
répondu Tim Goodman 2017-10-04 15:00:01

Si c'est localisation les séparateurs de milliers, les séparateurs de décimales et de séparateurs, aller avec le texte suivant:

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

il y a plusieurs options que vous pouvez utiliser (et même des locales avec des retombées):

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>

Détails sur le MDN page info .

Edit: Auteurs @j'aime Serena Ajoute ce qui suit:

pour prendre en charge les navigateurs dont la localisation n'est pas en Anglais, utilisez value.toLocaleString('en') . Fonctionne aussi pour floating point.

116
répondu kaiser 2017-05-23 12:10:03

essayer de gérer cela avec une seule expression régulière (sans rappel) ma capacité actuelle me échoue faute d'un look-behind négatif en Javascript... néanmoins, voici une autre alternative concise qui fonctionne dans la plupart des cas généraux - en tenant compte de tout point décimal en ignorant les correspondances où l'index de la correspondance apparaît après l'index d'une période.

const format = num => {
    const n = String(num),
          p = n.indexOf('.')
    return n.replace(
        /\d(?=(?:\d{3})+(?:\.|$))/g,
        (m, i) => p < 0 || i < p ? `${m},` : m
    )
}

[
    format(100),        // "100"
    format(1000),       // "1,000"
    format(1e10),       // "10,000,000,000"  
    format(1000.001001) // "1,000.001001"
]
    .forEach(n => console.log(n))

" Verbose explication regex (regex101.com)

flow diagram

25
répondu Emissary 2018-07-15 07:38:10

il y a un joli plugin jQuery number: https://github.com/teamdf/jquery-number

il vous permet de changer n'importe quel nombre dans le format que vous aimez, avec des options pour les chiffres décimaux et les caractères de séparation pour les décimales et mille:

$.number(12345.4556, 2);          // -> 12,345.46
$.number(12345.4556, 3, ',', ' ') // -> 12 345,456

vous pouvez l'utiliser à l'intérieur des champs d'entrée directement, ce qui est plus agréable, en utilisant les mêmes options comme ci-dessus:

$("input").number(true, 2);

ou vous pouvez appliquer à un ensemble complet de Éléments DOM utilisant le sélecteur:

$('span.number').number(true, 2);
8
répondu qdev 2014-11-01 14:51:44
// thousand separates a digit-only string using commas
// by element:  onkeyup = "ThousandSeparate(this)"
// by ID:       onkeyup = "ThousandSeparate('txt1','lbl1')"
function ThousandSeparate()
{
    if (arguments.length == 1)
    {
        var V = arguments[0].value;
        V = V.replace(/,/g,'');
        var R = new RegExp('(-?[0-9]+)([0-9]{3})'); 
        while(R.test(V))
        {
            V = V.replace(R, ',');
        }
        arguments[0].value = V;
    }
    else  if ( arguments.length == 2)
    {
        var V = document.getElementById(arguments[0]).value;
        var R = new RegExp('(-?[0-9]+)([0-9]{3})'); 
        while(R.test(V))
        {
            V = V.replace(R, ',');
        }
        document.getElementById(arguments[1]).innerHTML = V;
    }
    else return false;
}   
4
répondu h.foroutan 2011-07-14 19:22:09

j'utilise ceci:

function numberWithCommas(number) {
    return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

source: lien

2
répondu Abhishek Goel 2017-06-26 18:24:11

vous pouvez utiliser javascript. ci-dessous le code, il sera seulement accept numérique et un dot

voici le javascript

<script >

            function FormatCurrency(ctrl) {
                //Check if arrow keys are pressed - we want to allow navigation around textbox using arrow keys
                if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) {
                    return;
                }

                var val = ctrl.value;

                val = val.replace(/,/g, "")
                ctrl.value = "";
                val += '';
                x = val.split('.');
                x1 = x[0];
                x2 = x.length > 1 ? '.' + x[1] : '';

                var rgx = /(\d+)(\d{3})/;

                while (rgx.test(x1)) {
                    x1 = x1.replace(rgx, '' + ',' + '');
                }

                ctrl.value = x1 + x2;
            }

            function CheckNumeric() {
                return event.keyCode >= 48 && event.keyCode <= 57 || event.keyCode == 46;
            }

  </script>

HTML

<input type="text" onkeypress="return CheckNumeric()" onkeyup="FormatCurrency(this)" />

DEMO JSFIDDLE

2
répondu Awtszs 2017-08-18 07:13:19
number = 123456.7089;
result = parseInt( number ).toLocaleString() + "<br>";
result = number.toLocaleString( 'pt-BR' ) + "<br>";

var el = document.getElementById( 'result' );
el.innerHTML = result;
<div id="result"></div>
2
répondu Ricardo 2017-09-26 15:38:58
var number = 35002343;

console.log(number.toLocaleString());

pour la référence, vous pouvez vérifier ici https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString

2
répondu vikashraj144 2018-02-06 12:52:43

PHP.js a une fonction pour faire cela appelé number_format . Si vous êtes familier avec PHP cela fonctionne exactement de la même manière .

1
répondu istvanp 2011-04-12 11:13:22

Tout ce que vous devez faire est vraiment ce :

123000.9123.toLocaleString()
//result will be "123,000.912"
1
répondu Ezeewei 2017-07-10 02:24:58

Je n'ai aimé aucune des réponses ici, donc j'ai créé une fonction qui a fonctionné pour moi. Juste envie de partager au cas où quelqu'un d'autre le trouve utile.

function getFormattedCurrency(num) {
    num = num.toFixed(2)
    var cents = (num - Math.floor(num)).toFixed(2);
    return Math.floor(num).toLocaleString() + '.' + cents.split('.')[1];
}
-1
répondu Spencer Sullivan 2015-11-19 16:07:32