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#)
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,''))
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.
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))
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);
// 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;
}
j'utilise ceci:
function numberWithCommas(number) {
return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
source: lien
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)" />
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>
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
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 .
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];
}