Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1570 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Décaler la virgule

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Décaler la virgule

n°2187111
krisiun
Posté le 23-04-2013 à 09:30:49  profilanswer
 

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! ^^

mood
Publicité
Posté le 23-04-2013 à 09:30:49  profilanswer
 

n°2187141
krisiun
Posté le 23-04-2013 à 11:08:48  profilanswer
 

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 ?


Message édité par krisiun le 23-04-2013 à 11:09:11
n°2187259
scull
MySCULL cay bon mangez en!
Posté le 23-04-2013 à 21:06:15  profilanswer
 

tu as essayé un var_dump() de la valeur qui sors de ta bdd ?


Message édité par scull le 23-04-2013 à 21:06:23

---------------
Créer son forum gratuit |  Mon beau blog phpBB caÿ le mal :o
n°2187314
krisiun
Posté le 24-04-2013 à 09:11:30  profilanswer
 


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


Message édité par krisiun le 24-04-2013 à 09:16:33
n°2187316
krisiun
Posté le 24-04-2013 à 09:22:32  profilanswer
 

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 ? :D
J'ai peut-être mal converti ma string en int (j'ai utilisé intval($variable) c'est correct?)


Message édité par krisiun le 24-04-2013 à 09:32:44
n°2187328
Farian
Posté le 24-04-2013 à 10:23:51  profilanswer
 

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 !

n°2187330
x1fr
Posté le 24-04-2013 à 10:30:01  profilanswer
 

utilise floatval au lieu de intval peut être ?


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2187336
krisiun
Posté le 24-04-2013 à 11:04:24  profilanswer
 

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?

Message cité 1 fois
Message édité par krisiun le 24-04-2013 à 11:08:34
n°2187337
x1fr
Posté le 24-04-2013 à 11:07:56  profilanswer
 

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 :p
Donc 0.04 converti en entier ca donne 0
 
et 0*100 ca donne toujours 0
 

krisiun a écrit :


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
$ok=$test*100;  
echo $ok;//ça m'écrit 0 ...


 
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()


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
n°2187339
krisiun
Posté le 24-04-2013 à 11:09:29  profilanswer
 

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
     


Message édité par krisiun le 24-04-2013 à 11:25:00
mood
Publicité
Posté le 24-04-2013 à 11:09:29  profilanswer
 

n°2187365
krisiun
Posté le 24-04-2013 à 12:56:02  profilanswer
 

J'ai une autre question :
 
si j'ai 0.0388 comment je fais pour avoir 3.88 ? (pour avoir un pourcentage quoi!)

n°2187394
x1fr
Posté le 24-04-2013 à 14:34:13  profilanswer
 

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?


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Décaler la virgule

 

Sujets relatifs
Besoin d'aide, décompte automatique de chiffre a virguleEnlever le virgule arabe
decaler une matrice vers le hautProblème virgule TVA sur les factures
[Réglé] Supprimer virgule et X caracteres apreserreur ORA 00917 virgule absente
Deux chiffres après la virgule[Maple] Convertir nombre à virgule en hexadécimal
[resolut]remplacer des point virgule par des virgule ?[ VB ] numericupdown point/virgule
Plus de sujets relatifs à : Décaler la virgule


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR