Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1445 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Forcer l'affichage d'un nombre x.xx

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Forcer l'affichage d'un nombre x.xx

n°890460
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 18:16:53  profilanswer
 

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:

mood
Publicité
Posté le 04-11-2004 à 18:16:53  profilanswer
 

n°890461
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 18:18:31  profilanswer
 

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
n°890467
gizmo
Posté le 04-11-2004 à 18:29:59  profilanswer
 

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

n°890469
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 18:32:05  profilanswer
 

gizmo a écrit :

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

:??:

n°890473
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 18:37:11  profilanswer
 

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

n°890474
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 18:38:53  profilanswer
 

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>

n°890478
simogeo
j'ai jamais tué de chats, ...
Posté le 04-11-2004 à 18:45:34  profilanswer
 

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
n°890479
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 18:47:34  profilanswer
 

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...

n°890480
gizmo
Posté le 04-11-2004 à 18:47:59  profilanswer
 

'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...

n°890482
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 18:51:40  profilanswer
 

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...

mood
Publicité
Posté le 04-11-2004 à 18:51:40  profilanswer
 

n°890484
gizmo
Posté le 04-11-2004 à 18:57:12  profilanswer
 

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.

n°890488
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 19:00:40  profilanswer
 

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...

n°890489
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 19:01:43  profilanswer
 

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...

n°890493
gizmo
Posté le 04-11-2004 à 19:03:53  profilanswer
 

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

n°890500
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 19:07:11  profilanswer
 

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

n°890507
SomeBugsIn​Me
life suxx
Posté le 04-11-2004 à 19:09:29  profilanswer
 

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
n°890515
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 19:15:47  profilanswer
 

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:

n°890519
gizmo
Posté le 04-11-2004 à 19:17:39  profilanswer
 

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

n°890522
Hermes le ​Messager
Breton Quiétiste
Posté le 04-11-2004 à 19:20:22  profilanswer
 

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

n°890939
gizmo
Posté le 05-11-2004 à 02:07:17  profilanswer
 

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.

n°890969
Leris
Posté le 05-11-2004 à 08:24:14  profilanswer
 

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
n°890970
Hermes le ​Messager
Breton Quiétiste
Posté le 05-11-2004 à 08:27:27  profilanswer
 

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. :)

n°890973
Hermes le ​Messager
Breton Quiétiste
Posté le 05-11-2004 à 08:29:59  profilanswer
 

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.

n°891140
Leris
Posté le 05-11-2004 à 12:23:09  profilanswer
 

Hermes le Messager a écrit :

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


 
??

n°891164
Hermes le ​Messager
Breton Quiétiste
Posté le 05-11-2004 à 13:11:11  profilanswer
 


 
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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  Forcer l'affichage d'un nombre x.xx

 

Sujets relatifs
Forcer le chargement du JavascriptAffichage aléatoire d'un des enregistrements du résultat d'une requète
affichage d'une jlist non rafraîchie après des modifs[C] Conversion nombre hexa en decimal
Nombre maximum de fichiers ouverts par processus<li> en inline : forcer la longueur
un site pour tester l'affichage sous differents navigateurs ?Affichage de 1er, 2e, 3e etc.
Bouton "modifier les sources" ou menu affichage/source[CSS] Affichage avec Opéra
Plus de sujets relatifs à : Forcer l'affichage d'un nombre x.xx


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR