JeuWeb - Crée ton jeu par navigateur
sérialisation des float en php - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : sérialisation des float en php (/showthread.php?tid=5511)



sérialisation des float en php - php_addict - 24-06-2011

bonjour

j'avais abordé le sujet ici concernant JavaScript : http://www.jeuweb.org/showthread.php?tid=6816 et il se trouve que j'ai un problème vaguement similaire:

quand on sérialize un float comme par exemple 1.01 on se retrouve avec une valeur telle que :
1.0100000000000000088817841970012523233890533447265625

ce qui est normal car en binaire 1.01 ne peut être représenté

le problème c'est que je stocke des objets sérialisés en bdd et que ca prend pas mal de place pour rien que de sérialiser des float, donc je fais ceci:

$float = (string)round($float_to_serialize , 4);

en gros je triche avec le typage faible de php et transtype mon float en string

je sens que vous allez me dire que c'est une bidouille pourrie, mais comment faire autrement ?

bonne journée


RE: sérialisation des float en php - Roworll - 24-06-2011

Tu peux travailler avec ini_set sur la variable serialize_precision.


$float_to_serialize=1.02;

//Effectue la sérialisation avec la précision par défaut
$float = serialize($float_to_serialize);

echo $float; //renvoie d:1.020000000000000017763568394002504646778106689453125;

//Définie la précision désirée de la fonction sérialize
ini_set('serialize_precision',4);

//Effectue la sérialisation
$float = serialize($float_to_serialize);

echo $float; //renvoie d:1.02;



RE: sérialisation des float en php - php_addict - 24-06-2011

merci, je ne savais pas que l'on pouvais changer la configuration pour la précision d'une sérialisation...


RE: sérialisation des float en php - Bertrand - 02-07-2011

Tu peux utiliser sprintf (ou l'une des variantes) => doc
Alors c'est tout vilain Big Grin (le format peut être assez pénible à établir ou à lire), et il y a peut-être des fonctions plus adaptées ou plus faciles à manipuler mais je ne connais pas assez PHP.

Un exemple:
Code :
$v=123456.789;
printf("v=%.2f<BR/>",$v);
echo sprintf("v=%.1f",$v)."<BR/>";
Son résultat :
Code :
v=123456.79
v=123456.8




RE: sérialisation des float en php - php_addict - 02-07-2011

merci du conseil


RE: sérialisation des float en php - niahoo - 03-07-2011

par contre on en a parlé sur ce fofo y a vraiment pas longtemps, donc ça vaudrait le coup de chercher


RE: sérialisation des float en php - php_addict - 03-07-2011

(03-07-2011, 06:10 PM)niahoo a écrit : par contre on en a parlé sur ce fofo y a vraiment pas longtemps, donc ça vaudrait le coup de chercher

oui c'est l'un de mes topics: http://www.jeuweb.org/showthread.php?tid=6816 mais là il s'agit d'un cas un peu spécial car ici j'ai merdé en changeant une directive de php : ini_set('serialize_precision',4);