1

Je suis en train de finir les derniers modules de mon projet de stage (qui finit bientot) et je m'aperçois lors de mes tests que je perd de la précision sur pas mal d'endroits!

Mon appli doit faire des calculs (principalement des pourcentages) de dosages pour des recettes. Comme c'est en labo je descend parfois à une grande précision.

Or mon problème c'est que dans ma base MySQL j'ai des double, qui ne sont pas tronqués quand je les insere à la main, mais par contre si je veux les insérer via PHP en passant par sprintf() (je l'utilise pour sécurirser mes requètes) alors les valeurs sont tronqués car sprintf() ne semble pas supporter les double!

Avez-vous deja eu à gérer cela?
avatar
"If you see strict DRM and copy protection that threatens the preservation of history, fight it: copy the work, keep it safe, and eventually share it so it never disappears. [...] no one living 500 years from now will judge your infringing deeds harshly when they can load up an ancient program and see it for themselves."

Benj Edwards - Why History Needs Software Piracy

- - -
Achat ou échange: topic de mes recherches Meilleur smiley = #helico# Obligatory XKCD

2

Tu ne peux pas te passer de sprintf et utiliser une méthode un peu plus "php style" pour concaténer tes chaînes (opérateur .) ? Je ne sais pas si ça change quelque chose (peut-être que php fait un sprintf en interne après), mais ça vaut le coup d'essayer. Sinon regarde aussi du coté des options pour changer la précision de %f (un truc genre %5.5f pour avoir 5 chiffres avant et après la virgule, de mémoire ; je ne sais pas si la précision par défaut est la précision maximale).
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

de toute, toutes les conversions double->string passent par (v)(s)(n)printf, donc il vaut mieux le faire explicitement avec un %10.10f

par défaut c'est une précision de 6 (cf "man printf")

4

heu... pour tes deux affirmations, tu es sûr que ça s'applique au cas du PHP ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

d'après ça http://fr3.php.net/manual/fr/language.types.float.php je suppose que sur un serveur pc linux le float de php sera un "double" du C(++)

d'après ça http://fr3.php.net/manual/fr/function.sprintf.php y'a rien marqué mais vu que php est codé en C je vois pas pourquoi ils utiliseraient pas le sprintf de la libc, j'ai la flemme d'aller cherche le code source.

bon, ptet ça utilise ça aussi: http://fr3.php.net/manual/fr/function.number-format.php

6

Merci de vos réponses, je teste ça demain.
avatar
"If you see strict DRM and copy protection that threatens the preservation of history, fight it: copy the work, keep it safe, and eventually share it so it never disappears. [...] no one living 500 years from now will judge your infringing deeds harshly when they can load up an ancient program and see it for themselves."

Benj Edwards - Why History Needs Software Piracy

- - -
Achat ou échange: topic de mes recherches Meilleur smiley = #helico# Obligatory XKCD