Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

drole de comportement avec serialize

2 réponses
Avatar
alti
Bonjour,
je suis en train de faire des extractions de données brut en batch php.
Je suis obligé de creer des tableaux multidimensionnés et, par momen,t
de faire des moyennes des 'n' tableaux suivant l'indice selectionné.

j'ai une fonction qui me fait cela, et qui me retourne un round($out,3);

or quand j'affiche mes resultats en cours d'execution par un simple
echo, j'ai bien des valeurs du genre 596.333 arrondi à 3 après virgule.

Or ces tableaux, en fin d'execution, je dois les serializés pour les
stocker.

Si je regarde mes fichiers, je m'apercois que pendant la serialization,
mes données sont stockées en d: (float), jusque la rien d'anormal, mais
que la précision est plus ou moins de 46 chiffres après la virgule et
non 3 chiffres, d'ou une perte de place (taille de fichiers) en sortie.

Quelqu'un à une idée du pourquoi, voire du comment y remedier autrement
qu'en faisant un substr($out,0,str_pos($out,'.')+3);

alti

2 réponses

Avatar
Guillaume Bouchard
alti wrote:
Si je regarde mes fichiers, je m'apercois que pendant la serialization,
mes données sont stockées en d: (float), jusque la rien d'anormal, mais
que la précision est plus ou moins de 46 chiffres après la virgule et
non 3 chiffres, d'ou une perte de place (taille de fichiers) en sortie.


C'est un float, tu n'y peux rien...

Quelqu'un à une idée du pourquoi, voire du comment y remedier autrement
qu'en faisant un substr($out,0,str_pos($out,'.')+3);


Si jamais tu est certain que tu bosses avec des nombres à 10E-3 près en
permanance, je te conseil de bosser avec des entiers et de faire la
division qui va bien lors de l'affichage.

$val = $truc / 1000;

C'est d'ailleurs comme cela que doit être stocker toutes les données
monaitaires, cela simplifie les calculs et le stockage du fait que l'on
utilise que des entiers.

--
Guillaume.

Avatar
alti
alti wrote:

[...]


Si jamais tu est certain que tu bosses avec des nombres à 10E-3 près en
permanance, je te conseil de bosser avec des entiers et de faire la
division qui va bien lors de l'affichage.

$val = $truc / 1000;

Merci,

C'est ce que je vais faire, un "return intval($val*1000);" suffira

C'est d'ailleurs comme cela que doit être stocker toutes les données
monaitaires, cela simplifie les calculs et le stockage du fait que l'on
utilise que des entiers.


ce en sont pas des données monaitaires, mais numérique sans aucun doute,
donc...


alti