Existe-t-il une fonction en Javascript pour formater les nombres et les chaînes de caractères ?
Je cherche un moyen de faire un séparateur de milliers de caractères ou de nombres... (Comme String.Format en c#)
Existe-t-il une fonction en Javascript pour formater les nombres et les chaînes de caractères ?
Je cherche un moyen de faire un séparateur de milliers de caractères ou de nombres... (Comme String.Format en c#)
Mise à jour (7 ans plus tard)
La référence citée dans la réponse originale ci-dessous était erronée. Il y a es une fonction intégrée pour cela, ce qui est exactement ce que fait le kaiser suggère ci-dessous : toLocaleString
Vous pouvez donc le faire :
(1234567.89).toLocaleString('en') // for numeric input
parseFloat("1234567.89").toLocaleString('en') // for string input
La fonction mise en œuvre ci-dessous fonctionne également, mais n'est tout simplement pas nécessaire.
(J'ai pensé que j'aurais peut-être de la chance et que je découvrirais qu'il fue nécessaire en 2010, mais non. D'après cette une référence plus fiable En effet, toLocaleString fait partie de la norme depuis la 3e édition d'ECMAScript [1999], ce qui signifie, je crois, qu'il aurait été pris en charge dès IE 5.5).
Réponse originale
Selon le cette 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 la manière de la coder soi-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, '$1' + ',' + '$2');
}
return x1 + x2;
}
Edita: Pour aller dans l'autre sens (convertir une chaîne avec des virgules en nombre), vous pourriez faire quelque chose comme ceci :
parseFloat("1,234,567.89".replace(/,/g,''))
Mise à jour de la prise en charge du look-behind en accord avec les changements d'ECMAScript2018.
Pour une compatibilité ascendante, défilez plus bas pour voir la solution originale.
Une expression régulière peut être utilisée - particulièrement utile pour traiter les grands nombres stockés sous forme de chaînes de caractères.
const format = num =>
String(num).replace(/(?<!\..*)(\d)(?=(?:\d{3})+(?:\.|$))/g, '$1,')
;[
format(100), // "100"
format(1000), // "1,000"
format(1e10), // "10,000,000,000"
format(1000.001001), // "1,000.001001"
format('100000000000000.001001001001') // "100,000,000,000,000.001001001001
]
.forEach(n => console.log(n))
" Explication de regex verbeuses (regex101.com)
Cette réponse originale n'est peut-être pas nécessaire, mais elle peut être utilisée à des fins de rétrocompatibilité.
En essayant de gérer cela avec une seule expression régulière (sans rappel) ma capacité actuelle me fait défaut 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 - tenir compte de tout point décimal en ignorant les correspondances où l'index de la correspondance apparaît après l'index d'un point.
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"
format('100000000000000.001001001001') // "100,000,000,000,000.001001001001
]
.forEach(n => console.log(n))
Il existe un plugin jQuery pour les nombres : https://github.com/teamdf/jquery-number
Il vous permet de modifier n'importe quel nombre dans le format que vous souhaitez, avec des options pour les chiffres décimaux et les caractères de séparation pour les décimales et les milliers :
$.number(12345.4556, 2); // -> 12,345.46
$.number(12345.4556, 3, ',', ' ') // -> 12 345,456
Vous pouvez l'utiliser directement dans les champs de saisie, ce qui est plus agréable, en utilisant les mêmes options que ci-dessus :
$("input").number(true, 2);
Vous pouvez également l'appliquer à un ensemble d'éléments du DOM à l'aide d'un sélecteur :
$('span.number').number(true, 2);
var number = 35002343;
console.log(number.toLocaleString());
Pour la référence, vous pouvez consulter le site suivant https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString
J'utilise ceci :
function numberWithCommas(number) {
return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
source : enlace
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.