Bonjour,
Je vous soumets un mystère mystérieux que vous avez peut-être déjà rencontré (j'ai parcouru le forum mais sans succès)
Le résultat attendu serait 2 fois deux lignes marquant : 8.30 et 8.60, or comme j'utilise le conditionnel il devient évident que ce n'est pas ce que j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 echo "<hr>Boucle While<hr>"; $start = 8.30; $end = 8.60; $pas = 0.30; $i = $start; while($i<=$end) { echo $i."<br>"; $i+=$pas; } echo "<hr>Boucle FOR <hr>"; $start = 8.30; $end = 8.60; $pas = 0.30; for($i = $start; $i<=$end; $i+=$pas) { echo $i."<br>"; }
J'imagine que c'est du au fait d'avoir un pas décimal, mais là où le mystère s’épaissit c'est que le code ci-dessous lui renvoi la bonne liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Boucle While 8.3 Boucle FOR 8.3
Il y a bien un moyen de contournement en multipliant le pas et les limites par 100, et de diviser le résultat par 100, mais j'aurai aimé savoir si vous aviez une autre solution plus pérenne, parce que ce contournement oblige de tester le nombre de décimale pour multiplier par le bon coefficient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 echo "<hr>Boucle While<hr>"; $start = 8.30; $end = 8.60; $pas = 0.10; $i = $start; while($i<=$end) { echo $i."<br>"; $i+=$pas; }
Solution de contournement mis en place :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 echo "<hr>Boucle FOR <hr>"; $start = (int) (8.30 * 100); $end = (int) (8.60 * 100); $pas = (int) (0.30 * 100); for($i = $start; $i<=$end; $i+=$pas) { echo number_format($i/100 , 2) ."<br>"; }
Partager