Aïe je plafonne!!

Aïe je plafonne!! - C - Programmation

Marsh Posté le 04-05-2006 à 11:53:56    

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

Reply

Marsh Posté le 04-05-2006 à 11:53:56   

Reply

Marsh Posté le 04-05-2006 à 12:09:59    

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
Reply

Marsh Posté le 04-05-2006 à 14:30:42    

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/
Reply

Marsh Posté le 05-05-2006 à 18:40:35    


Toujours dans la finesse... [:ddr555]


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed