J'ai le code suivant à afficher dans le système de numérotation indien.
var x=125465778;
var res= x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
Je reçois cette sortie: 125,465,778
.
J'ai besoin d'une sortie comme celle-ci: 12,54,65,778
.
S'il vous plaît, aidez-moi à résoudre ce problème.
Pour les entiers:
var x=12345678;
x=x.toString();
var lastThree = x.substring(x.length-3);
var otherNumbers = x.substring(0,x.length-3);
if(otherNumbers != '')
lastThree = ',' + lastThree;
var res = otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree;
alert(res);
Pour float:
var x=12345652457.557;
x=x.toString();
var afterPoint = '';
if(x.indexOf('.') > 0)
afterPoint = x.substring(x.indexOf('.'),x.length);
x = Math.floor(x);
x=x.toString();
var lastThree = x.substring(x.length-3);
var otherNumbers = x.substring(0,x.length-3);
if(otherNumbers != '')
lastThree = ',' + lastThree;
var res = otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree + afterPoint;
alert(res);
je suis en retard mais je suppose que cela aidera :)
vous pouvez utiliser Number.prototype.toLocaleString ()
Syntaxe
numObj.toLocaleString([locales [, options]])
var number = 123456.789;
// India uses thousands/lakh/crore separators
document.getElementById('result').innerHTML = number.toLocaleString('en-IN');
// → 1,23,456.789
document.getElementById('result1').innerHTML = number.toLocaleString('en-IN', {
maximumFractionDigits: 2,
style: 'currency',
currency: 'INR'
});
// → Rs.123,456.79
<div id="result"></div>
<div id="result1"></div>
Pour les entiers seulement, aucune manipulation supplémentaire n'est nécessaire.
Cela correspondra à chaque chiffre à partir de la fin, avec un ou plusieurs motifs à deux chiffres après, et le remplacera par lui-même + ",":
"125465778".replace(/(\d)(?=(\d\d)+$)/g, "$1,");
-> "1,25,46,57,78"
Mais puisque nous voulons en avoir 3 à la fin, énonçons cela explicitement en ajoutant un "\ d" supplémentaire avant la fin de la saisie:
"125465778".replace(/(\d)(?=(\d\d)+\d$)/g, "$1,");
-> "12,54,65,778"
Avec un nombre en dessous de la fonction, il retourne un nombre formaté au format indien du regroupement de chiffres.
ex: entrée: 12345678567545.122343
sortie: 1,23,45,67,85,67,545.122343
function formatNumber(num) {
var n1, n2;
num = num + '' || '';
// works for integer and floating as well
n1 = num.split('.');
n2 = n1[1] || null;
n1 = n1[0].replace(/(\d)(?=(\d\d)+\d$)/g, "$1,");
num = n2 ? n1 + '.' + n2 : n1;
return num;
}
Utilisez simplement https://osrec.github.io/currencyFormatter.js/
Alors tout ce dont vous avez besoin est:
OSREC.CurrencyFormatter.format(2534234, { currency: 'INR' });
// Returns ₹ 25,34,234.00
Cela devrait marcher.
var number=12345678;
alert(number.toLocaleString());
vous pouvez aussi passer les arguments dans la fonction ici par defualt, il faudra une convention internationale ..__ Si vous voulez utiliser la convention indienne, vous devriez l'écrire comme ceci.
alert(number.toLocaleString("hi-IN"));
Mais ce code ne fonctionnera que sur Chrome, Mozzilla et IE . Il ne fonctionnera pas sur Safari.
Essayez comme ci-dessous, j'ai trouvé un plugin de formateur de nombres ici: Java script number Formatter
En utilisant le code ci-dessous, cela fonctionne bien, essayez ceci, cela vous aidera.
SCRIPT:
<script src="format.20110630-1100.min.js" type="text/javascript"></script>
<script>
var FullData = format( "#,##0.####", 125465778)
var n=FullData.split(",");
var part1 ="";
for(i=0;i<n.length-1;i++)
part1 +=n[i];
var part2 = n[n.length-1]
alert(format( "#0,#0.####", part1) + "," + part2);
</script>
Contributions :
1) 125465778
2) 1234567.89
Les sorties :
1) 12,54,65,778
2) 12,34,567.89
Cette fonction peut gérer correctement la valeur float, simplement en ajoutant une autre réponse
function convertNumber(num) {
var n1, n2;
num = num + '' || '';
n1 = num.split('.');
n2 = n1[1] || null;
n1 = n1[0].replace(/(\d)(?=(\d\d)+\d$)/g, "$1,");
num = n2 ? n1 + '.' + n2 : n1;
n1 = num.split('.');
n2 = (n1[1]) || null;
if (n2 !== null) {
if (n2.length <= 1) {
n2 = n2 + '0';
} else {
n2 = n2.substring(0, 2);
}
}
num = n2 ? n1[0] + '.' + n2 : n1[0];
return num;
}
cette fonction convertira toute la fonction en flottant telle quelle
function formatAndConvertToFloatFormat(num) {
var n1, n2;
num = num + '' || '';
n1 = num.split('.');
if (n1[1] != null){
if (n1[1] <= 9) {
n2 = n1[1]+'0';
} else {
n2 = n1[1]
}
} else {
n2 = '00';
}
n1 = n1[0].replace(/(\d)(?=(\d\d)+\d$)/g, "$1,");
return n1 + '.' + n2;
}
Je suis un peu en retard dans le jeu . Mais voici la manière implicite de le faire.
var number = 3493423.34;
console.log(new Intl.NumberFormat('en-IN', { style: "currency", currency: "INR" }).format(number));
si vous ne voulez pas de symbole monétaire, utilisez-le comme ceci
console.log(new Intl.NumberFormat('en-IN').format(number));
Voici la fonction,
function numberWithCommas(x) {
return x.toString().substring(0,x.toString().split('.')[0].length-3).replace(/\B(?=(\d{2})+(?!\d))/g, ",") + "," + x.toString().substring(x.toString().split('.')[0].length-3);
}
si votre entrée est 10000.5,
numberWithCommas(10000.5)
Vous obtiendrez une sortie comme celle-ci, 10,000.5
Basé sur la question de Nidhinkumar j’ai vérifié les réponses ci-dessus et Lors du traitement des nombres négatifs, la sortie ne sera pas correcte, par exemple: -300 il devrait s’afficher en tant que -300 mais les réponses ci-dessus l’afficheront sous la forme -, 300 qui n'est pas bon alors j'ai essayé avec le code ci-dessous qui fonctionne même pendant les cas négatifs.
var negative = input < 0;
var str = negative ? String(-input) : String(input);
var arr = [];
var i = str.indexOf('.');
if (i === -1) {
i = str.length;
} else {
for (var j = str.length - 1; j > i; j--) {
arr.Push(str[j]);
}
arr.Push('.');
}
i--;
for (var n = 0; i >= 0; i--, n++) {
if (n > 2 && (n % 2 === 1)) {
arr.Push(',');
}
arr.Push(str[i]);
}
if (negative) {
arr.Push('-');
}
return arr.reverse().join('');