Trouver la valeur supérieur arrondie a n'importe quel chiffre ?

Trouver la valeur supérieur arrondie a n'importe quel chiffre ? - Perl - Programmation

Marsh Posté le 22-04-2004 à 18:14:20    

Salut,
 
je suis en train de chercher une solution qui me permettrait de définir à coup sur la valeur supérieur arrondie à une certaine valeur.
 
Par exemple, j'ai une valeur=55 et j'aimerais trouver soit une fonction, soit un algorithme qui me dise d'emblée, que la valeur supérieure arrondie aux dizaines est 60.
il faut que ça marche a tout les coups, que ma valeur soit egale a 0.5141 ou qu'elle soit égale a 5411448144...
 
En fait c'est pour définir l'echelle d'un graphique et faire en sorte que mon axe en y soit bien défini avec des chiffres rond que je puisse dessiner de maniere propre une echelle régulière. (c'est pour faire des graphiques vectoriels et interactifs à base de bases rrd)
 
Pour l'instant j'utilise des comparaisons afin de définir des unités en fonction de la valeur max que j'ai sur une série de données. En gros j'utilise un sprintf pour reccuperer le premier chiffre de mon nombre ainsi que le log en base 10 afin de définir sa puissance. Mais ça marche pas pour les valeur inférieures a 1...
 
Si quelqu'un avait une idée, ça m'aiderait bien.
 
Merci.

Reply

Marsh Posté le 22-04-2004 à 18:14:20   

Reply

Marsh Posté le 23-04-2004 à 00:28:02    

Code :
  1. use POSIX qw(floor);
  2. my $value = 1; # remplace par ce que tu veux
  3. my $new_value = floor($value) - ($value % 10) + 10;


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 23-04-2004 à 17:27:50    

Salut,
 
merci bien pour ta réponse, mais chez moi (sur windows) je suis pas sur si ça fait ce que c'est censé faire. Qu'est ce que c'est censé faire ?
 
si je mets 5451 dans value, ça me retourne 5460 dans new_value, et dans ce cas j'ai pas besoin d'utiliser de fonction en plus car :
value - value%10 +10
me donne le meme resultat.
 
floor(5415) me donne 5415...
la fonction floor est censée donner un autre resultat ?

Reply

Marsh Posté le 23-04-2004 à 17:35:20    

OK
 
la fonction floor fait l'arrondi inférieur !
c'est toujours ça de gagné sur mon sprintf qui me fait un arrondi supérieur !
sinon, je vais devoir arranger ta procedure, car en fait, pour la valeur 5462, je prefererais avoir comme arrondi supérieur 6000.
et puis de toute maniere, pour les chiffres compris entre 0 et 1 je suis coincé...

Reply

Marsh Posté le 23-04-2004 à 17:45:12    

Code :
  1. use POSIX qw(floor);
  2. my $value=5411454;
  3. sub calc_power{
  4.   my ($number) = @_;
  5.   my $log = log($number)/log(10);
  6.   my $result=1;
  7.   for (my $i=1; $i<$log;$i++){
  8.     $result=$result*10
  9.   }
  10.   return $result;
  11. }
  12. my $power = calc_power($value);
  13. my $new_value = floor($value) - ($value % $power) + $power;


 
enfin, si y avait une fonction qui faisait ça d'un coup, voir qui faisait un calcul intelligent genre trouver comme limite 5500 pour 5325, ça serait bien mieux :)


Message édité par chevket le 23-04-2004 à 17:47:13
Reply

Marsh Posté le 23-04-2004 à 21:31:04    

jvais te regardé ca ce soir (15hrs30 ici), et jvais surement te faire ca en 1 ou 2 lignes :P

Reply

Sujets relatifs:

Leave a Replay

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