Ecriture d'un nombre selon un format précis

Ecriture d'un nombre selon un format précis - Perl - Programmation

Marsh Posté le 25-06-2003 à 15:55:53    

Salut
 
Je voudrais pouvoir écrire des nombres sous la forme 0.#####E+(-)##
Après quelques recherches (je débute complètement), je me retrouve avec cette ligne :
 
printf FOUT "%- .5E, %- .5E, %- .5E, \n", $Y, $Z, $TEMPERATURE ;
 
Et j'obtiens, par exemple :
8.02000E+00, 0.00000E+00,  3.77380E+01,
 
C'est pas mal, mais mon but c'est  
0.80200E+01, 0.00000E+00,  0.37738E+02
 
Et pour avoir ça, j'ai beau chercher sur des tutoriels de Perl ou de C, je ne trouve rien.
Si vous avez des idées, elles sont les bienvenues.


---------------
Prison d'été, prison d'hiver, prison d'automne et de printemps, bagne pour petits et grands - Prévert, Le Roi et l'Oiseau
Reply

Marsh Posté le 25-06-2003 à 15:55:53   

Reply

Marsh Posté le 25-06-2003 à 23:57:45    

voila une solution bien crade, à défaut de mieux:
 

Code :
  1. $a = sprintf "%- .5E, %- .5E, %- .5E, \n", $Y, $Z, $TEMPERATURE ;
  2. $a =~ s/([^0])\.(\d*)E(.)(\d\d)/$_=$2;substr($_,-1)>=5&&substr($_,-2,1)++;chop;my$e=$4-1+2*($3eq"+" );"0.$1$_"."E$3".($e<9?"0$e":$e)/ge;
  3. print $a;

Reply

Marsh Posté le 26-06-2003 à 00:07:45    

ha oui au fait, tel que c'est la ca arrondi au lieu de tronquer:
 
3.77386E+01 => 0.37739E+02  
 
si tu veut tronquer c'est plus court:
 

Code :
  1. $a = sprintf "%- .5E, %- .5E, %- .5E, \n", $Y, $Z, $TEMPERATURE ;
  2. $a =~ s/([^0])\.(\d*)E(.)(\d\d)/$_=$2;chop;my$e=$4-1+2*($3eq"+" );"0.$1$_"."E$3".($e<9?"0$e":$e)/ge;
  3. print $a;


[/citation]

Reply

Marsh Posté le 26-06-2003 à 09:27:49    

Merci bien. J'ai utilisé la solution avec arrondi, même si avec une telle précision, ça n'a plus beaucoup d'importance. Par contre je ne comprends rien, mais je promets de me pencher dessus dès que j'aurai le temps.


---------------
Prison d'été, prison d'hiver, prison d'automne et de printemps, bagne pour petits et grands - Prévert, Le Roi et l'Oiseau
Reply

Marsh Posté le 26-06-2003 à 10:19:41    

pospos a écrit :

ha oui au fait, tel que c'est la ca arrondi au lieu de tronquer:
 
3.77386E+01 => 0.37739E+02  
 
si tu veut tronquer c'est plus court:
 

Code :
  1. $a = sprintf "%- .5E, %- .5E, %- .5E, \n", $Y, $Z, $TEMPERATURE ;
  2. $a =~ s/([^0])\.(\d*)E(.)(\d\d)/$_=$2;chop;my$e=$4-1+2*($3eq"+" );"0.$1$_"."E$3".($e<9?"0$e":$e)/ge;
  3. print $a;




[/citation]
C'est la qu'on se dit qu'on est content de parler le Perl couramment :sweat: :D

Reply

Marsh Posté le 26-06-2003 à 22:20:01    

Marnie a écrit :

Par contre je ne comprends rien, mais je promets de me pencher dessus dès que j'aurai le temps.


 
Pas la peine de t'y plonger: c'est du code imbitable de gros porc, j'ai moi-meme du mal à me relire. Mais bon l'essentiel c'est que ca fasse le boulot...

Reply

Marsh Posté le 27-06-2003 à 14:09:56    

Ah ok :D  
Un jour où j'aurai vraiment rien à faire, alors ; ou bien si j'ai besoin d'épater mon stagiaire.


---------------
Prison d'été, prison d'hiver, prison d'automne et de printemps, bagne pour petits et grands - Prévert, Le Roi et l'Oiseau
Reply

Marsh Posté le 29-08-2003 à 14:07:14    

un module CPAN qui fait ca plus proprement:
 
http://search.cpan.org/author/COLI [...] iEng-0.91/

Reply

Sujets relatifs:

Leave a Replay

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