Accueil > Forum > > > > Problème de conversion avec StrToFloat
Problème de conversion avec StrToFloat
vendredi 2 février 2007 à 15:57:53 |
Problème de conversion avec StrToFloat

John Dogget
|
Salut à tous. Problème tous simple : quand j'utilise la fonction StrToFloat, Delphi semble rajouter des chiffres à la valeur réelle du nombre, et devient alors imprécis sur cette valeur  Exemple avec le code : var NombreReel:extended; Chaine:string; ... NombreReel:=StrToFloat(Edit1.Text); Chaine:=FloatToStr(NombreReel); Si on dis que Edit1.Text="12.3659", on constate que Chaine va être egale à "12.3658999999999..." Pourquoi delphi ajoute ces chiffres ? Comment l'eviter ?
|
|
vendredi 2 février 2007 à 16:50:54 |
Re : Problème de conversion avec StrToFloat

cirec
|
Salut, il est surprenant ton problème ! je viens de testé avec les infos que tu donnes et le resultat correspond exactement à la chaine  je me suis dit ... peut être un problème de version de Delphi  j'ai donc compilé avec D4 et D9 ... même résultat !!! par contre si je déclare NombreReel en Single j'obtiens le même problème que tu décris essaye voir en déclarant NombreReel en Currency @+ Cirec
|
|
vendredi 2 février 2007 à 16:57:41 |
Re : Problème de conversion avec StrToFloat

Loda
|
salut,
Ce n'est pas delphi. C'est normal. Cela vient de l'encodage des nombre réel en mémoire.
les nombres sont stocké sous la form mantis - exposant - signe. donc la mantis (1.23659) est toujours arrondie à la plus proche puisssance de 2. donc, ce n'est pas exactement le nombre que tu tape au clavier.
Pour resoudre ce genre de problème, - affiche tes nombre avec un format avec deciaml fixe ("format" vas bien pour ça) - ou stock la valeur sous forme de string (beurk)
Loda
PS: je te conseille de te renseigner sur l'encodage en mémoire et les effets secondaire liées. ça peut-être la cause d'erreur dur à identifier. (ajout de petit nombre à un grand sans effet ; comparaison d'égalité toujours fausse; ...)
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
|
|
vendredi 2 février 2007 à 17:03:31 |
Re : Problème de conversion avec StrToFloat
|
vendredi 2 février 2007 à 17:41:40 |
Re : Problème de conversion avec StrToFloat

John Dogget
|
Réponse acceptée !
Vous battez pas  J'ai trouvé mon erreur !! En fait pour reprendre mon exemple de code plus haut, j'avais déclaré NombreReel comme un "real" et non comme un "extended". Ca se passait bien à la compilation sauf que les fonction "FloatToStr" et "StrToFloat" ont besoin d'un "extended" pour travailler, et pas d'un "real". Merci à vous deux 
|
|
vendredi 2 février 2007 à 18:23:55 |
Re : Problème de conversion avec StrToFloat

florenth
|
Salut,
Juste pour dire un mot au passage: lorsque vous avez beson de flottants, utilisez toujours "Double", c'est le meilleur compromis taille/précision.
Si vous avez besoin d'un max de précision, prenez "Extended" mais ne touchez jamais à Single, c'est une catastrophe sauf si c'est pour manipuler peu de chiffres significatifs (comme des coordonnées qui devront ensuite être arrondies au pixel près).
Voila, bonne prog'
A+
Flo
|
|
vendredi 2 février 2007 à 19:27:33 |
Re : Problème de conversion avec StrToFloat

jace1975
|
Yo,
au passage y'a une fonction roundto , qui marche bien et qui permet notamment avec un truc genre setroundmode de définir le type d'arrondi sur un float.
++
|
|
samedi 3 février 2007 à 19:42:27 |
Re : Problème de conversion avec StrToFloat

Loda
|
@Cirec:
je dirais parceque :
soit tu n'as pas pris le même nombre que lui (et l'arrondi "tombe" juste pour toi). soit l'arrondi dépend (aussi) de la machine.
Loda
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
|
|
samedi 3 février 2007 à 21:06:51 |
Re : Problème de conversion avec StrToFloat
|
samedi 3 février 2007 à 22:41:58 |
Re : Problème de conversion avec StrToFloat

Loda
|
J'avais eut ce problème il y quelques année en ADA lors que j'affichait un nombre avec 6 décimal, alors que je l'avait initilisé avec 3 seulement (genre 1.20 devient 1.1999999)
alors faisont un petit test:
context: D6 Pro, P4m
avec le code donné par John, je n'ai pas de problème. Même string avant et après conversion.
Mais si je met 1.023999999999999 (et plus de 9) je recupère 1.025
Si tu fais des test sur la limit de la précision (cad en affichant le max de decimal):
NombreReel:=StrToFloat(Edit1.Text); // = 1.00000000000007 (a coller dans l'edit au runtime ou design time) Chaine:=Format('%.18f',[NombreReel]);
// je lit 1.000000000000069920
Donc, j'ai moins de 15 chiffre significatif, alors que l'aide dit 19-20: Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10
Loda
PS : "ce qui revient à dire qu'en fonction de la machine le résultat peut être juste où faux", parce que toi, t'as jamais eut un programme qui marchait sur 10 machine identique sauf une? ou un prog qui marchait pas sur certaine machine sans raison apparante?
De toute façon, il ne faux pas jouer trop près de la limit de précision des flottant. ça t'apporte toujours des emmerdes. Dans le doute, prend un type plus précis.
Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
|
|
Cette discussion est classée dans : problème, chaine, conversion, strtofloat, nombrereel
Répondre à ce message
Sujets en rapport avec ce message
Problème conversion [ par jbob ]
Bonjour,Comment fait-on pour convertir par ex une ce format horaire 02:45:00 pour que cela fasse 2,75 pour pouvoir effectuer des calculs sur des tau
Problème de conversion avec Extended [ par thoreycity ]
Bonjour,Je voudrais convertir une variable de type Extended en String.J'ai pourtant cherché dans l'aide delphi et sur le site mais je n'ai rien trouvé
conversion d une chaine en somme [ par valkyrie ]
bonjourje rentre un nom propre (par exemple)et apres click ca doit me sortir la somme des valeurs des lettres dans l alphabetexemple je rentre nicon=1
StrToFloat Problème avec le séparateur des milliers [ par codial ]
Bonsoir tout le monde, J'importe des données dans une table paradox à partir d'un fichier texte et j'ai un problème avec ce code: table1.Fieldbyname('
Conversion de Chaine [ par temporaire123456 ]
Salut, je suis débutant dans le domaine de la programmation.Je voudrais en faite savoir comment faire pour convertir des chaines ?par exemple je voudr
Chaine Supprimer des apostrophes [ par Filipe35 ]
Bonjour à tousJe me hurte au problème suivantj'ai une chaine quit vaut 'uebgse.bob'J'aimerais supprimer les apostropes de
Problème avec Pos(S1, S2) [ par Bacterius ]
Bonjour, j'ai un petit problème avec la fonction Pos (pour trouver une sous-chaine dans une chaine).En fait j'essaye de faire un nettoyeur de cookies,
Attention voila une bonne question de conversion ! [ par billou_13 ]
Alors, voila mon problème, je lis un fichier texte et je dois récupérer les valeurs dans des variables de type single ou double.Voila ma ligne lue:
conversion bit en string [ par biloue ]
BonjourDans un programme je récupère une chaine de bit qui m'est envoyé par liaison UDP. Chaine composée de 0 et de 1.Je souhaiterai convertir cette c
problème de conversion de types [ par orel85 ]
bonsoir.j'en ai ras le bol des histoires de conversion; je tombe sur un gros problème là. je vous explique, j'ai çà : StringGrid.Cells[NumeroColonne,1
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LES SERVICES D'APPLICATIONS DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Xavier Moreels et Julien Bakmezdjian Ce sujet est lié au partage des applications comme services dans SharePoint 2010, ceci représente la possibilité de créer sa propre application qui sera utilisable comme ceux en standard : Search...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA GED ET SHAREPOINT 2010TECHDAYS PARIS 2010 : LA GED ET SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Etienne Lacour Cette session a commencé par un rappel de la gestion de contenu et surtout une résumé des points ayant été amélioré avec 2010. Accompagné d'un point sur le cycle de vie des documents. Un rappel du fonctionnement de S...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : SHAREPOINT 2010 ET LES RéSEAUX SOCIAUXTECHDAYS PARIS 2010 : SHAREPOINT 2010 ET LES RéSEAUX SOCIAUX par ROMELARD Fabrice
Animé par: Olivier Lepeltier et Karim Manar Cette session commence par la présentation du concept de réseau social, mais surtout de la particularité de du réseau social dans une entreprise. La vision du réseau social est donc une extension du MyS...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : SHAREPOINT 2010 - DESCRIPTION ET NOUVEAUTéSTECHDAYS PARIS 2010 : SHAREPOINT 2010 - DESCRIPTION ET NOUVEAUTéS par ROMELARD Fabrice
Animé par: Karim Manar et Laurent Beaudouin Cette session a pour but de revenir sur ce qu'est SharePoint globalement, mais aussi de voir les évolutions liées avec l'avènement de la version 2010. A partir de la marguerite de...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE LUNDITECHDAYS PARIS 2010 : PLEINIèRE LUNDI par ROMELARD Fabrice
Comme chaque année, c'est le grand rassemblement autour des technologies Microsoft qui se déroule donc à Paris au Palais des Congrès. Cette année est riche pour Microsoft en terme de livraison produit, paris l...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|