Les arrondis peuvent parfois réserver des surprises. Regardez par exemple le code suivant :

  1. <?php
  2. for ($i = 0; $i <= 1; $i += 0.05)
  3. {
  4.   printf ("%.2f %.1f %.1f\n", $i, $i, round($i, 1));
  5. }
  6. ?>

Ce qui nous donne :

0.00 0.0 0.0
0.05 0.1 0.1
0.10 0.1 0.1
0.15 0.2 0.2
0.20 0.2 0.2
0.25 0.2 0.3
0.30 0.3 0.3
0.35 0.3 0.4
0.40 0.4 0.4
0.45 0.4 0.5
0.50 0.5 0.5
0.55 0.5 0.6
0.60 0.6 0.6
0.65 0.7 0.7
0.70 0.7 0.7
0.75 0.8 0.8
0.80 0.8 0.8
0.85 0.9 0.9
0.90 0.9 0.9
0.95 1.0 1.0

Les deux résultats sont différents !

L’explication, vous la trouverez dans la documentation de perl (perldoc -q round) :

Don’t blame Perl.  It’s the same as in C.  IEEE says we have to do this.  Perl numbers whose absolute values are integers under 2**31 (on 32 bit machines) will work pretty much like mathematical integers.  Other numbers are not guaranteed.

Leave a Reply