web-dev-qa-db-fra.com

Affichage d'un numéro au format indien à l'aide de Javascript

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.

35
tilak

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);

Démo en direct

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);

Démo en direct

46
Prasath K

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>

35
Tushar Gupta

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"
16
slopen

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;
}

https://jsfiddle.net/scLtnug8/1/ ​​

5
D P Venkatesh

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
2
Vaibhav Khullar

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.

2
Nikhil

Le moyen le plus simple consiste à utiliser le plugin Globalize (pour en savoir plus ici et ici ):

var value = 125465778;
var formattedValue = Globalize.format(value, 'n');
1
tpeczek

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
1
Pandian

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;
}
1
Yatender Singh

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));
0
shubhamkes

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

0

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('');
0
Nidhin kumar