Décaler la virgule - PHP - Programmation
Marsh Posté le 23-04-2013 à 11:08:48
Je vois que des gens regarde mais ne réponde pas, mais en gros (je m'explique surement très mal ) :
j'ai dans une variable le nombre 0.044464xxxx et ça n'affiche que 0.04, pourquoi ?
peut-être que la requête SQL ne prends que 0.4 ? comment puis-je modifier ça ?
Marsh Posté le 23-04-2013 à 21:06:15
tu as essayé un var_dump() de la valeur qui sors de ta bdd ?
Marsh Posté le 24-04-2013 à 09:11:30
effectivement j'ai ça : string '0,04' (length=4)
déjà j'apprends que c'est un string et pas un int et en plus que j'ai que 0.04 ... c'est un problème dans la base alors ?
edit : pourtant quand je regarde dans la base j'ai bien le grand nombre à virgule
et je n'ai aucun droit ds la BdD pour changer quoi que ce soit, et même si 'javais je ne serai pas quoi changer :S
Marsh Posté le 24-04-2013 à 09:22:32
Désolée du double post mais au final je vais tenter de convertir en int, et ce sera arrondi pas grave, même si ça aurait été important d'avoir les chiffres exact, si quelqu'un a une solution je suis tjrs là en tout cas !
Edit : J'ai une autre question !!
J'ai 0.04, quand je fais *100 ça me donne 0 donc -> problème, j'aimerais alors plutôt décalé la virgule vers la droite ! Existe-t-il une fonction à laquelle j'applique 0.04 et qui me rend 4 ?
J'ai peut-être mal converti ma string en int (j'ai utilisé intval($variable) c'est correct?)
Marsh Posté le 24-04-2013 à 10:23:51
Si vous convertissez en entier la chaîne qui est dans la base, soit "0,04", c'est normal que cela donne 0, et la multiplication par 100 ne change rien.
Ou alors j'ai mal compris
Bonne continuation !
Marsh Posté le 24-04-2013 à 11:04:24
Pourquoi ça ne marcherait Farian? je comprends pas , 0.04*100 = 4 non ? XD
J'ai le code là :
$test=odbc_result($rs,"EvolAnnee_1_2" ); //EvolAnnee_1_2 c'est 0.04 en string
floatval($test); //je veux mettre "0.04" en float
echo $test //0,04
$ok=$test*100;
echo $ok;//ça m'écrit 0
y'a une multiplication spécial pour les floats?
Marsh Posté le 24-04-2013 à 11:07:56
krisiun a écrit : Pourquoi ça ne marcherait Farian? je comprends pas , 0.04*100 = 4 non ? XD |
Parce que par définition, un entier est ... entier
Donc 0.04 converti en entier ca donne 0
et 0*100 ca donne toujours 0
krisiun a écrit : |
Dans ton premier exemple tu donnais 0,04 et non pas 0.04, il faut peut être convertir la virgule du string en point avant de lancer floatval()
Marsh Posté le 24-04-2013 à 11:09:29
je me suis trompée je l'ai toujours sous forme 0,04 avec une virgule, quand je fais floatval($variable) ça fonctionne quand je l'echo j'ai 0.04, comment j'obtiens 4 à partir de ce nombre alors ?
Peut-être un décalage de virgule de 2 chiffres?
Edit :
J'ai élaboré une solution :
$test=odbc_result($rs,"EvolAnnee_1_2" ); // $test = "0.04"
$cf = explode ( ',', $test); //je coupe la chaîne au niveau de la virgule
echo $cf[0]."<br>"; //0
echo $cf[1]."<br>"; //04
donc voilà je garde sous forme de chaine je prends $cf[1], c'est largement arrondi mais tant pis j'ai pas le choix
Merci de votre aide en tout cas
Marsh Posté le 24-04-2013 à 12:56:02
J'ai une autre question :
si j'ai 0.0388 comment je fais pour avoir 3.88 ? (pour avoir un pourcentage quoi!)
Marsh Posté le 24-04-2013 à 14:34:13
Faut régler le problème à la source.
La table contient visiblement un nombre à virgule, la requête doit te retourner un nombre à virgule (pas un entier, pas un string).
Soit sous la forme 0 <= 0.xx <= 1, auquel cas dans ton php tu le multiplie par 100, soit sous la forme 0 <= x <= 100, auquel cas tu l'affiche tel quel.
Bidouiller string en te basant sur la position d'un caractère, ca va marcher pour 0.01, 0.02, ..... 0.09, après tu sera bloqué, la preuve avec 0.0388
La requête ressemble à quoi?
Marsh Posté le 23-04-2013 à 09:30:49
Bonjour,
je suis entrain de coder une application mobile en PhP, et ma base de donnée est sous forme .nsf (c'est une base lotus notes), les requêtes s'effectuent de la même façon que les autres BdD.
Enfin quoi qu'il en soit, je dois reproduire les tableaux de chiffre d'affaire de l'entreprise dans laquelle je travaille, dans les tableaux j'ai bien 4.01% d'évolution, -13.37%, ect, mais lorsque je fais ma requête ça devient 0.04,- 0.13, et il m'est impossible remettre sous la forme 4.01 ou -13.37, j'ai bien vérifier et 0.04 c'est 0.0401648434, donc ça devrait être possible ...
j'ai testé la multilplication par 100, sprintf et number_format et round pour tenter de voir si j'ai bien des nombres après le 4 de 0.04, rien de fonctionne, et le pire dans tout ça c'est que si je multiplie 0.04 par 100 ça va me donner 0 !! wtf ? ça devrait au moins me donner 4...
quand je tente le number_format ou round, ça ne fait rien ça n'affiche aucun nombre (je fais round($monnombre,4), et ça reste 0.04, pourtant dans la base lotus notes ça me dit bien que 0.04 c'est 0.0401648434 ! pourquoi quand je fais ma requête je l'ai pas entièrement ?? dois-je faire quelque chose dans la requête même pour l'avoir sous forme 0.0401648434 ?
si quelqu'un s'y connait , si vous avez pas de connaissance de LotusNotes vous pouvez quand même m'aider hein je pense pas que ça influe! ^^