Forcer l'affichage d'un nombre x.xx

Forcer l'affichage d'un nombre x.xx - HTML/CSS - Programmation

Marsh Posté le 04-11-2004 à 18:16:53    

Question un peu moins débile que la précédente [:ddr555]
 
Pour arrondir un float à x.xx, j'utilise :
 
var resultat = Math.round(100*parseFloat(nombre))/100;
 
Le problème, c'est qu'évidemment, 1.5 reste 1.5 et ne se transforme pas en 1.50.
 
Connaissez vous une méthode en JS pour forcer l'affichage des décimales (formatter le nombre quoi en somme) ?  :whistle:  
 
Arjuna, si tu me lis...  :whistle:

Reply

Marsh Posté le 04-11-2004 à 18:16:53   

Reply

Marsh Posté le 04-11-2004 à 18:18:31    

Quelque chose me dit que je vais avoir moins de réponses que lors du précédent topic... [:ddr555]


Message édité par Hermes le Messager le 04-11-2004 à 18:18:41
Reply

Marsh Posté le 04-11-2004 à 18:29:59    

réponse à pouf: y a pas un padding right comme fonction en ecma?

Reply

Marsh Posté le 04-11-2004 à 18:32:05    

gizmo a écrit :

réponse à pouf: y a pas un padding right comme fonction en ecma?

:??:

Reply

Marsh Posté le 04-11-2004 à 18:37:11    

Bon après moultes recherches sur google, il n'existerait rien en JS pour ça. Il faut donc le faire soi-même... :/

Reply

Marsh Posté le 04-11-2004 à 18:38:53    

Voilà apparemment le genre de truc qu'il faut faire : :/
 

Code :
  1. function format_number(p,d)
  2. {
  3.   var r;
  4.   if(p<0){p=-p;r=format_number2(p,d);r="-"+r;}
  5.   else   {r=format_number2(p,d);}
  6.   return r;
  7. }
  8. function format_number2(pnumber,decimals)
  9. {
  10.   var strNumber = new String(pnumber);
  11.   var arrParts = strNumber.split('.');
  12.   var intWholePart = parseInt(arrParts[0],10);
  13.   var strResult = '';
  14.   if (isNaN(intWholePart))
  15.     intWholePart = '0';
  16.   if(arrParts.length > 1)
  17.   {
  18.     var decDecimalPart = new String(arrParts[1]);
  19.     var i = 0;
  20.     var intZeroCount = 0;
  21.      while ( i < String(arrParts[1]).length )
  22.      {
  23.        if( parseInt(String(arrParts[1]).charAt(i),10) == 0 )
  24.        {
  25.          intZeroCount += 1;
  26.          i += 1;
  27.        }
  28.        else
  29.          break;
  30.     }
  31.     decDecimalPart = parseInt(decDecimalPart,10)/Math.pow(10,parseInt(decDecimalPart.length-decimals-1));
  32.     Math.round(decDecimalPart);
  33.     decDecimalPart = parseInt(decDecimalPart)/10;
  34.     decDecimalPart = Math.round(decDecimalPart);
  35.     //If the number was rounded up from 9 to 10, and it was for 1 'decimal'  
  36.     //then we need to add 1 to the 'intWholePart' and set the decDecimalPart to 0.  
  37.     if(decDecimalPart==Math.pow(10, parseInt(decimals)))
  38.     {
  39.       intWholePart+=1;
  40.       decDecimalPart="0";
  41.     }
  42.     var stringOfZeros = new String('');
  43.     i=0;
  44.     if( decDecimalPart > 0 )
  45.     {
  46.       while( i < intZeroCount)
  47.       {
  48.         stringOfZeros += '0';
  49.         i += 1;
  50.       }
  51.     }
  52.     decDecimalPart = String(intWholePart) + "." + stringOfZeros + String(decDecimalPart);
  53.     var dot = decDecimalPart.indexOf('.');
  54.     if(dot == -1)
  55.     {
  56.       decDecimalPart += '.';
  57.       dot = decDecimalPart.indexOf('.');
  58.     }
  59.     var l=parseInt(dot)+parseInt(decimals);
  60.     while(decDecimalPart.length <= l)
  61.     {
  62.       decDecimalPart += '0';
  63.     }
  64.     strResult = decDecimalPart;
  65.   }
  66.   else
  67.   {
  68.     var dot;
  69.     var decDecimalPart = new String(intWholePart);
  70.     decDecimalPart += '.';
  71.     dot = decDecimalPart.indexOf('.');
  72.     var l=parseInt(dot)+parseInt(decimals);
  73.     while(decDecimalPart.length <= l)
  74.     {
  75.       decDecimalPart += '0';
  76.     }
  77.     strResult = decDecimalPart;
  78.   }
  79.   return strResult;
  80. }
  81. </script>

Reply

Marsh Posté le 04-11-2004 à 18:45:34    

gizmo a écrit :

réponse à pouf: y a pas un padding right comme fonction en ecma?


 
+1, ca serait bien pour hlm [:itm]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 04-11-2004 à 18:47:34    

simogeo a écrit :

+1, ca serait bien pour hlm [:itm]


 
 :sweat:  
 
Bon, je vais devoir me faire ma chtite fonction ) moi tout seul alors...  :sweat:  Je vais pas pinner l'énorme truc ci-dessus qui permet de rêgler le nombre de décimales. Je ne garde que les deux premières décimales...

Reply

Marsh Posté le 04-11-2004 à 18:47:59    

'tain, t'es dans le genre à en faire trois tonnes pour rien.
 
1° Tu splittes à la virgule et tu mets en string
2° Si ya qqch après la virgule, tu le concatènes avec des 0
3° tu prends un substring de cette concaténation et tu la concatène avec la partie entière de ton nombre.
 
Faut pas chercher plus loin...

Reply

Marsh Posté le 04-11-2004 à 18:51:40    

gizmo a écrit :

'tain, t'es dans le genre à en faire trois tonnes pour rien.
 
1° Tu splittes à la virgule et tu mets en string
2° Si ya qqch après la virgule, tu le concatènes avec des 0
3° tu prends un substring de cette concaténation et tu la concatène avec la partie entière de ton nombre.
 
Faut pas chercher plus loin...


 
Ben c'est ce que je suis en train de faire, mais je voulais m'assurer qu'il n'existait pas de possibilité avec les objets JS. [:spamafote]
 
En PHP ou en JAVA c'est tout à fait possible par exemple...

Reply

Marsh Posté le 04-11-2004 à 18:51:40   

Reply

Marsh Posté le 04-11-2004 à 18:57:12    

Hermes le Messager a écrit :

Ben c'est ce que je suis en train de faire, mais je voulais m'assurer qu'il n'existait pas de possibilité avec les objets JS. [:spamafote]
 
En PHP ou en JAVA c'est tout à fait possible par exemple...


euh... oui, j'ai regardé également. Mais ton code est BEAUCOUP trop complexe inutilement.

Reply

Marsh Posté le 04-11-2004 à 19:00:40    

Voilà :  
 

Code :
  1. var chr_prix_ext = new String(prix_ext);
  2.  var parties_prix_ext = chr_prix_ext.split('.');
  3.  var partie_1 = parties_prix_ext[0];
  4.  var partie_2 = parties_prix_ext[1];
  5.  var lg_partie_2 = partie_2.length;
  6.  if (lg_partie_2 == 0)
  7.  {
  8.   var resultat = partie_1+'.'+'00';
  9.  }
  10.  else if (lg_partie_2 == 1)
  11.  {
  12.   var resultat = partie_1+'.'+partie_2+'0';
  13.  }
  14.  else
  15.  {
  16.   var resultat = partie_1+'.'+partie_2;
  17.  }


 
Mais ya surement plus simple et/ou propre...

Reply

Marsh Posté le 04-11-2004 à 19:01:43    

gizmo a écrit :

euh... oui, j'ai regardé également. Mais ton code est BEAUCOUP trop complexe inutilement.


 
C'est pas le mien. C'est un exemple de ce qu'on trouve pour formater des nombres en JS. Le dernier code pour avoir deux décimales est de moi et je pense que je vais m'en contenter...

Reply

Marsh Posté le 04-11-2004 à 19:03:53    

:/ Je te donne difficilement la moyenne avec un tel code.

Reply

Marsh Posté le 04-11-2004 à 19:07:11    

gizmo a écrit :

:/ Je te donne difficilement la moyenne avec un tel code.


 
J'aurais aussi pu faire une boucle et ajouter le nombre de 0 en fonction du nombre de décimales, mais je trouve ça encore plus lourd...
 
Si on voulait pouvoir changer le nombre de décimales, ok, mais là...  
 
Tu ferais quoi toi ?  :o

Reply

Marsh Posté le 04-11-2004 à 19:09:29    

Je ferais de même que HLM.
 
J'ai pas trouvé de fonction "de base" qui puisse aider.
 
 

Code :
  1. function DoPlop(str) {
  2. tmp = str.split("." );
  3. if (tmp.length == 2) { // y 'a bien 1 seul point
  4.  if (tmp[1].length >= 2) { // ok
  5.   return str;
  6.  }
  7.  if (tmp[1].length == 1) { // manque un 0
  8.   return tmp[0]+"."+tmp[1]+"0";
  9.  }
  10.  // tmp[1].length==0
  11.  return tmp[0]+".00";
  12. }
  13. return str+".00";
  14. }


Message édité par SomeBugsInMe le 04-11-2004 à 19:13:10
Reply

Marsh Posté le 04-11-2004 à 19:15:47    

SomeBugsInMe a écrit :

Je ferais de même que HLM.
 
J'ai pas trouvé de fonction "de base" qui puisse aider.
 
 

Code :
  1. function DoPlop(str) {
  2. tmp = str.split("." );
  3. if (tmp.length == 2) { // y 'a bien 1 seul point
  4.  if (tmp[1].length >= 2) { // ok
  5.   return str;
  6.  }
  7.  if (tmp[1].length == 1) { // manque un 0
  8.   return tmp[0]+"."+tmp[1]+"0";
  9.  }
  10.  // tmp[1].length==0
  11.  return tmp[0]+".00";
  12. }
  13. return str+".00";
  14. }




 
Et ouai, parce qu'en fait, utiliser une boucle n'est intéressant que si on veut pouvoir changer le nombre de chiffre après la virgule.  :jap:

Reply

Marsh Posté le 04-11-2004 à 19:17:39    

:sarcastic: je vous le fait tantôt, là je file au théatre.

Reply

Marsh Posté le 04-11-2004 à 19:20:22    

gizmo a écrit :

:sarcastic: je vous le fait tantôt, là je file au théatre.


 
Ok.  :sol:  J'attend avec une certaine impatience ta soluce (et bon spectacle sinon. )

Reply

Marsh Posté le 05-11-2004 à 02:07:17    

Me revla.

Code :
  1. function formatNumber(nbr) {
  2.   var result = NaN;
  3.   if (typeof(nbr) == 'number') {
  4.     var str = new String(nbr);
  5.     var parts = str.split('.');
  6.     result = parts[0] + '.' + (parts.length == 1 ? '00' : (parts[1] + '0').substring(0,2));
  7.   }
  8.   return result;
  9. }


 
Comme ça, cela traite les numérique correctement et retourne un NaN en cas de mauvais input.

Reply

Marsh Posté le 05-11-2004 à 08:24:14    

salut,
 

Code :
  1. var nb=6.5;
  2. nb=nb.toFixed(2);
  3. alert(nb);


 
si nb=6.558 , retourne 6.56 .
toFixed(3) retourne 3 chiffres apres la virgule , etc .
 
 
L.


Message édité par Leris le 05-11-2004 à 08:25:52
Reply

Marsh Posté le 05-11-2004 à 08:27:27    

gizmo a écrit :

Me revla.

Code :
  1. function formatNumber(nbr) {
  2.   var result = NaN;
  3.   if (typeof(nbr) == 'number') {
  4.     var str = new String(nbr);
  5.     var parts = str.split('.');
  6.     result = parts[0] + '.' + (parts.length == 1 ? '00' : (parts[1] + '0').substring(0,2));
  7.   }
  8.   return result;
  9. }


 
Comme ça, cela traite les numérique correctement et retourne un NaN en cas de mauvais input.


 
C'est joli en effet. Bravo. :)

Reply

Marsh Posté le 05-11-2004 à 08:29:59    

Leris a écrit :

salut,
 

Code :
  1. var nb=6.5;
  2. nb=nb.toFixed(2);
  3. alert(nb);


 
si nb=6.558 , retourne 6.56 .
toFixed(3) retourne 3 chiffres apres la virgule , etc .
 
 
L.


 
Je ne connaissais pas, mais de toutes manières :  

Citation :


For those of you who also need to ensure legacy browsers such as IE5 also perform the desired number formatting operation, well, then it's time to roll your own function.

Reply

Marsh Posté le 05-11-2004 à 12:23:09    

Hermes le Messager a écrit :

je voulais m'assurer qu'il n'existait pas de possibilité avec les objets JS.  


 
??

Reply

Marsh Posté le 05-11-2004 à 13:11:11    


 
Qui fonctionne au moins avec IE 5+ ;)
 
Merci tout de même de m'avoir fait découvrir toFixed... :)


Message édité par Hermes le Messager le 05-11-2004 à 13:11:24
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed