IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

R�ccuperer un Edit dans un float


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Inscrit en
    Octobre 2004
    Messages
    115
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par d�faut R�ccuperer un Edit dans un float
    Bonjour � toutes et � tous,

    j'ai besoin de votre aide car il y a un truc que j'arrive pas du tout � comprendre ...

    En faite je dispose d'un objet TEdit dans lequel on �crit des valeurs � virgules.
    J'aimerais r�ccup�rer cette valeur et faire des op�rations dessus.

    j'ai donc fait ceci :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    float flTaux;
     
    flTaux = StrToFloat(EditTaux->Text);
    En faisant ceci si le nombre de chiffre apr�s la virgule est sup�rieure � 1, le float flTaux ne correspond plus au contenu de l'edit.

    Exemple :

    Edit=1.5 => flTaux=1.5
    Edit=1.5475 => flTaux=1.547500658
    Edit=54.8474 => flTaux=54.847400425

    Alors j'ai copier le contenu dans de l'Edit dans un AnsiString et l� quelques soit le nombre de chiffres apr�s la virgule l'AnsiString contient la bonne valeure. Mais si je le convertis en Float ben rebelote, il ajoute des chiffres autres....

    Cordialement

  2. #2
    Membre Expert
    Avatar de sat83
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Par d�faut
    Utilise plut�t un double � la place d'un float:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    double flTaux;
    flTaux = StrToFloat(EditTaux->Text);

  3. #3
    Membre tr�s actif Avatar de nirgal76
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2007
    Messages
    924
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 924
    Par d�faut
    Une variante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    double flTaux = EditTaux->Text.ToDouble();

  4. #4
    Membre chevronn�

    Inscrit en
    Ao�t 2007
    Messages
    300
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2007
    Messages : 300
    Par d�faut
    Le probl�me se produirait aussi, bien que nettement plus loin apr�s la virgule, avec des double. C'est tout simplement du au fait que la repr�sentation des nombres � virgule de float et double n'est pas repr�sentable exactement en d�cimal, et vice-versa.
    Par exemple, la repr�sentation IEEE 754 en 32 bits ne dispose que de 23 bits pour repr�senter la mantisse, ce qui ne repr�sente qu'un peu plus de 8 millions de possibilit�s, qui de plus ne tombent pas "juste" avec les nombres � base 10, car cette mantisse est un nombre binaire.
    Par exemple, le nombre 54.8474 a pour repr�sentation la plus proche 0x425b63bd, ce qui vaut 54.847401. 0x425b63be vaudrait 54.847404, et 0x425b63bc vaudrait 54.847397.

    C'est un probl�me tr�s classique, qui fait qu'on doit prendre des pr�cautions en ing�nierie lorsque, par exemple, on place en coordonn�es "avion" une pi�ce dessin�e en coordonn�es locales: on peut avoir des surprises, non seulement au niveau des coordonn�es finales, mais surtout au niveau des propri�t�s de haut niveau des pi�ces, comme leur topologie, qui conditionne souvent leur usinage. (Edit: je pr�cise: si un �l�ment d'un pi�ce � un segment allant des coordonn�es (0.1,0.36) � (0.13, 0.345), on peut repr�senter ces nombres tr�s pr�cis�ment car les 23 bits de mantisse jouent � plein sur les parties fractionnaires. Si par contre on "place" l'�l�ment dans un objet de grande taille comme un b�timent ou un avion, les nouvelles coordonn�es sont du genre (53668.1,-27055.36) et l� il devient bien plus difficile de d�finir avec la m�me pr�cision un petit �cart).

    En finance, ces approximations sont bien entendu inacceptables, et on dispose de classes sp�ciales autorisant toute op�ration sur toute somme, vraie � la plus petite unit� de compte pr�s.

  5. #5
    Membre tr�s actif Avatar de nirgal76
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2007
    Messages
    924
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 924
    Par d�faut
    Tout � fait, voila pourquoi ici � mon taf, on a d�velopp� notre propre classe TReel � base de BCD (� partir de la classe TBCD des composant Systools). le r�el est cod� en interne sous forme de chaine (de taille dynamique) pour n'avoir aucune perte de pr�cision. Il a juste fallu red�finir les op�rateurs necessaires afin de les utiliser comme des double. et donc, on utilise pratiquement plus de double/float.

  6. #6
    Membre confirm�
    Inscrit en
    Octobre 2004
    Messages
    115
    D�tails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par d�faut
    Merci beaucoup de vos r�ponses.

    Donc pour faire simple y a pas de moyens a part de developper comme Nirgal76 une classe. Juste pour faire 2 multiplications c'est un peu trop je pense.

Discussions similaires

  1. edit dans messagebox
    Par didi59650 dans le forum Delphi
    R�ponses: 3
    Dernier message: 06/06/2006, 11h45
  2. un char dans un float
    Par speedcore dans le forum C
    R�ponses: 7
    Dernier message: 10/05/2006, 16h54
  3. Edition dans un ListCtrl
    Par Rupella dans le forum MFC
    R�ponses: 2
    Dernier message: 22/02/2006, 15h17
  4. utilisation du contenu d'un champ edit dans une requete sql
    Par amri2006 dans le forum C++Builder
    R�ponses: 2
    Dernier message: 23/01/2006, 16h05
  5. [MFC]Champ d'edition dans une Toolbar?
    Par kacedda dans le forum MFC
    R�ponses: 3
    Dernier message: 08/07/2005, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo