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

  FORUM HardWare.fr
  Programmation
  C

  Aïe je plafonne!!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aïe je plafonne!!

n°1359396
BigEno
Posté le 04-05-2006 à 11:53:56  profilanswer
 

Bonjour à tous,
 
J'utilise un programme dans lequel j'affiche la valeur de cette expression:
(int)(atof(qdbmnd_amount.arr)*100)
Je n'ai pas de souci si ce n'est que lorsque la chaine de caractère qdbmnd_amount.arr vaut par exemple 40000000:
j'obtiens une valeur de 2147483647 au lieu de 4000000000. Logique! me direz-vous car c'est la valeur max d'un int (4 octects).
Mais quand je change le cast en (double) ou rien (atof renvoie naturellement un double):
alors j'ai:1106103653___.  
 

  • Comment dois je faire le cast?
  • Si le problème vient du format d'affichage, que faut-il mettre  %d , %ld ou encore %Ld?

Quelqu'un pourrait trouver une solution à mon problème?
 
Merci d'avance

mood
Publicité
Posté le 04-05-2006 à 11:53:56  profilanswer
 

n°1359415
Elmoricq
Modérateur
Posté le 04-05-2006 à 12:09:59  profilanswer
 

Il est déconseillé d'utiliser atoi/atof car ces fonctions ne permettent aucune détection d'erreur.
 
Il vaut mieux utiliser strtol() pour les entiers, qui converti en long et devrait te convenir.
Voire, si ton compilateur est C99, utiliser strtoll() qui converti en long long. Mais c'est vraiment si tu plafonnes.
 
Pour les nombres flottants, c'est strtod() (ou strtold() pour les long double, mais pareil c'est C99).
 
Enfin, pour l'affichage avec printf(), c'est %ld pour les long, %f pour les double.


Message édité par Elmoricq le 04-05-2006 à 12:11:52
n°1359613
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-05-2006 à 14:30:42  profilanswer
 

BigEno a écrit :


  • Comment dois je faire le cast?
  • Si le problème vient du format d'affichage, que faut-il mettre  %d , %ld ou encore %Ld?



  • Pourquoi tu castes en int ? T'es maso ?
  • "%f"
Code :
  1. double value = strtod (qdbmnd_amount.arr, NULL) * 100;
  2.    printf ("value = %f\n", value);


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1360645
Sve@r
Posté le 05-05-2006 à 18:40:35  profilanswer
 


Toujours dans la finesse... [:ddr555]


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

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

  Aïe je plafonne!!

 

Sujets relatifs
Import de fichier(pdf) lourd dans Flash : Aie aie aie!Formulaire HTML, PHP et Mysql... aïe ça coince !!!
[Easy Php] Aie aie aie : ca plante !fonction de hashage, Aie !
Anglais informatisé... Aie ! J'y comprends pas tout ! 
Plus de sujets relatifs à : Aïe je plafonne!!


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)