yoda_arrondi
Invité n'ayant pas de compte PHPfrance
06 févr. 2017, 18:30
C'est un fait de l'informatique depuis ses débuts, les float sont toujours des approximations et il faut utiliser la/les fonction(s) appropriée(s) de la bonne façon pour arrondir vers la réalité illusoire voulue à défaut d'être une réalité alternée. Il faut approfondir davantage les types de données dans un language à typage faible comme PHP pour obtenir la précision désirée, j'ajoute donc un changement de précision pour rendre le tout un chouïa surnaturel.
<pre><?php
foreach(range(12, 21) as $precision) {
ini_set('precision', $precision); // precision est un terme scientifique assez connu
echo "precision: $precision\n";
$float_original = 16.056;
echo "original: $float_original\n"; // Résultat avec un exemple choisi : 16.056
$float_1 = round($float_original, 2); // toujours un float
echo "round(\$float_original, 2): $float_1\n"; // un cast en string a été fait par PHP en interne pour l'affichage
$float_2 = $float_1*100;
echo "\$float_1*100: $float_2\n"; // Tu verras que tout ne va pas bien ici... illusion... oups... précision oblige.
$int_1 = intval($float_1*100); // cast d'un float avec perte d'illusion de précision vers int
echo "intval(\$float_1*100): $int_1\n"; // Résultat : 1605 (????) on a perdu de l'illusion
$int_2 = round($float_1*100); // voilà un vrai cast de float vers int en conservant l'illusion
echo "round(\$float_1*100): $int_2\n"; // Résultat : 1606 (????) yé ! on est heureux dans un monde illusoire.
$str_1 = number_format($float_1*100, 0); // c'est un cast vers string... donc on quitte les float en concervant notre illusion
echo "number_format(\$float_1*100, 0): $str_1\n\n";
}
?></pre>
Étrange qu'aucune religion ne soit basée sur les float, car il y a toujours une infinité qui sépare 2 finalités pouvant même aller jusqu'à aucune indéfinition ! Stupéfiant notre univers il est.