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

  FORUM HardWare.fr
  Programmation
  C++

  Problème de conversion de float en int

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de conversion de float en int

n°321710
raph77
Posté le 03-03-2003 à 16:28:54  profilanswer
 

Salut !
 
J'ai un float que j'obtiens en divisant 0.1 par 0.1. Le résultat est donc 1. Quand je met cette valeur dans un int, il se converti en 0. Je suppose donc qu'en fait il vaut un peu moins de 1 et qu'il est tronqué quand il est converti en int :??:
 
Comment résoudre mon problème, sachant que je ne veux pas obtenir de float vu que ca doit me donner la taille d'un tableau ?

mood
Publicité
Posté le 03-03-2003 à 16:28:54  profilanswer
 

n°321713
Tetragramm​aton IHVH
dieu unique => pensée unique
Posté le 03-03-2003 à 16:32:10  profilanswer
 

Tu peux utiliser ceil() ou floor()


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
n°321723
raph77
Posté le 03-03-2003 à 16:40:27  profilanswer
 

Tetragrammaton IHVH a écrit :

Tu peux utiliser ceil() ou floor()


 
Ce sont des fonctions d'arrondi ?
C'est ce que je cherchais en ce moment, mais je ne comprend pas pourquoi ça me donne ce 0 :??:

n°321741
chrisbk
-
Posté le 03-03-2003 à 16:51:07  profilanswer
 

ben visiblement il arrondi pas, il converti au int inferieur
 
ceil et floor arrondissent pas non plus, se contentent de convertir au int superieur/inferieur


Message édité par chrisbk le 03-03-2003 à 16:51:43
n°321936
dsls
Posté le 03-03-2003 à 17:27:49  profilanswer
 

Pour arrondir, il suffit de faire un floor(x+0.5), ou ceil(x-0.5)


Message édité par dsls le 03-03-2003 à 17:28:47
n°321952
ceyquem
E falso sequitur quodlibet
Posté le 03-03-2003 à 17:33:20  profilanswer
 

cela dépend comment tu fais ton calcul je pense
 
si tu fais
 

Code :
  1. float a,b,c;
  2. int i;
  3. a=0.1;
  4. b=0.1;
  5. i=a/b;


 
cela risque de ne pas fonctionner
 
par contre as-tu essayé :
 

Code :
  1. float a,b,c;
  2. int i;
  3. a=0.1;
  4. b=0.1;
  5. c=a/b;
  6. i=(int)c;


 
sinon utilise math.h pour utiliser floor ou ceil
 
a++
 

n°321977
raph77
Posté le 03-03-2003 à 17:49:54  profilanswer
 

En fait je me suis trompé, je suis en double, j'ai :
 
double a = 0.1;
double b = 0.2;
 
a /= b;
 
void fonction(int nb)
{
...
int tab[a];
}
 
et je fais :
 
fonction (a);
 
Mais une fois dans le corps de la fonction, a est égal à 0...
 
Maintenant le programme ne plante plus, mais j'aimerais bien comprendre :(

n°322024
LeGreg
Posté le 03-03-2003 à 19:10:19  profilanswer
 

ben deja 0.1/0.2 ca donne 0.5 et non pas 1..
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°322028
Tetedeienc​h
Head Of God
Posté le 03-03-2003 à 19:16:33  profilanswer
 

legreg a écrit :

ben deja 0.1/0.2 ca donne 0.5 et non pas 1..
 
LeGreg


 
:lol:

n°322196
asphro
Posté le 03-03-2003 à 22:46:30  profilanswer
 

legreg a écrit :

ben deja 0.1/0.2 ca donne 0.5 et non pas 1..
 
LeGreg


 
 
 :jap:

mood
Publicité
Posté le 03-03-2003 à 22:46:30  profilanswer
 

n°322292
raph77
Posté le 04-03-2003 à 09:22:16  profilanswer
 

legreg a écrit :

ben deja 0.1/0.2 ca donne 0.5 et non pas 1..
 
LeGreg


 
C'est mon clavier qui ne marque pas ce que je veux :D
 
Je voulais bien sûr dire 0.1/0.1 ;)

n°340651
Musaran
Cerveaulté
Posté le 23-03-2003 à 02:47:11  profilanswer
 

raph77 a écrit :

J'ai un float que j'obtiens en divisant 0.1 par 0.1. Le résultat est donc 1.

Les flottants on une représentation binaire et ne peuvent représenter que des combinaisons de divisions par 2.
0.1 (écrit dans le source) ne vaut pas 0.1, mais 0.10000000000000001.
 
Cela dit, x/x devrait effectivement donner exactement 1. Et c'est effectivement la cas chez moi.
 
Soit ton processeur manque singulièrement de précision en virgule flottante.
Soit tes deux 0.1 ne sont pas obtenus de la même façon et sont différents.
Soit ton compilateur fait des bizarreries (vu avec Visual C++ 6 sans service pack).
 
 
ceyquem: ce que tu propose ne change rien.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°340665
Carbon_14
Posté le 23-03-2003 à 10:30:46  profilanswer
 

En modifiant ce que dit plus haut
 
Code :
 
  float a,b,c;
  int i;
   
  a=0.1;
  b=0.1;
  c=a/b;
  i=(int)(c + 0.5f); /* pour forcer à l'int POSITIF proche */
?


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

  Problème de conversion de float en int

 

Sujets relatifs
probleme win32problème de constructeur class & cie
Probleme de Syntaxe Requette MysqlOpenGL : GROS problème
[c] problème d'affichage de variable avec outtextxy()[YACC] Problème de récursion à droite
Probleme de validation de formulaire... page2conversion hexa -> Decimal
[apache/axis] problème avec Java2WSDLProbleme de connexion avec php sur une base de donnees
Plus de sujets relatifs à : Problème de conversion de float en int


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