stigmate101
Messages postés89Date d'inscriptionmardi 17 juin 2003StatutMembreDernière intervention30 avril 2020
-
19 juin 2006 à 01:12
N_M_B
Messages postés94Date d'inscriptionmardi 9 mai 2006StatutMembreDernière intervention 1 mars 2008
-
11 juil. 2006 à 22:40
Salut,
j'ai une question très simple, je voudrais conertir un type extended en un type string.
stigmate101
Messages postés89Date d'inscriptionmardi 17 juin 2003StatutMembreDernière intervention30 avril 2020 19 juin 2006 à 01:19
Re-Salut
Du reste sans vouloir trop abuser si vous pouviez me donner les fonctions les plus courantes pour faire des conversions, je suis toujours en train d'en chercher une cela me fairait gagner beaucoup de temps
FloatToStrF convertit la valeur flottante Valeur en une représentation de type chaîne.
Le paramètre Value est la valeur à convertir.
Le paramètre Precision indique la précision de la
valeur. Elle doit être inférieure ou égale à 7 pour les valeurs de type
Single, à 15 pour les valeurs de type Double, et à 18 pour les valeurs
de type Extended.
Ensemble, les paramètres Digits et Format contrôlent
le formatage de la valeur en une chaîne. Pour plus de détails, voir la
description de TFloatFormat.
Si la valeur est un NAN (valeur non numérique), la chaîne résultante
est 'NAN'. Si une valeur correspond à plus l'infini, la chaîne
résultante est 'INF'. Si une valeur est moins l'infini, la chaîne
résultante est '-INF'.
ces conversion ce trouve dans l'unité sysutils
@+
jlen
La première forme de FloatToStrF n'est pas adaptée aux threads car elle
utilise les informations de localisation contenues dans les variables
globales. La seconde forme de FloatToStrF, qui est adaptée aux threads,
fait référence aux informations de localisation contenues dans le
paramètre FormatSettings. Avant d'appeler la forme adaptée aux threads
de FloatToStrF, vous devez placer les informations de localisation dans
FormatSettings. Pour placer un ensemble de valeurs locales par défaut
dans FormatSettings, appelez GetLocaleFormatSettings.
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201412 19 juin 2006 à 14:56
salut cirec,
format est certe puissante mais lourde à utiliser à noter qu'elle
dérive directemnt du 'C' qui n'est pas un modèle de clareté pour les
spécificateurs(ces concepteurs devaient avoir des ampoules aux doigts
pour ne pas les expliciter par des noms qui soient compréhensibles par
le commun des mortels: c'est vrai aussi qu'à l'époque avec 16ko de ram
il valait mieux ne pas écrire des romans )
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 19 juin 2006 à 15:24
Salut Jlen,
il est vrai que l'utilisation de Format ne parait pas forcément très simple au début, surtout que l'aide de Delphi n'est pas claire sur tous les points, (enfin c'est mon avis)
Mais avec le tuto de F0xi tout et devenu plus facile d'accès.
Et les performances ne sont pas négligeable surtout dans la composition de chaîne comportant plusieurs Type de données.
Pour l'origine je ne sais pas mais j'ai essayé de comprendre un jour le code de Format mais mes connaissances en assembleur étant assez nul... résultat, j'y ai rien compris.
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201412 19 juin 2006 à 15:48
c'est la syntaxe que l'on retrouve en C dans printf et sprintf c'est
particluièrement indigeste surtout si tu n'as qu'une ou deux chaines à
formater pour les performances il faut relativiser ce n'est
intéressant que si tu as des boucles importantes ce qui n'est jamais le
cas en affichage (tout au plus quelques dizaines de champs et le temps
de les lire ils seront affichés depuis longtemps!!
Le cas est un peut différent si tu crées un fichier mais si tu dois
l'enregistrer sur disque il y a fort à parier que la différence ne sera
pas visible (surtout si tu utilises un thread)
L'utilisation de format n'est donc intéressante que si tu n'as pas de fonction permettant d'obtenir le résultat que tu souhaites.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 19 juin 2006 à 16:19
Voici le résultat de ma recherche
et c'est sans commentaire
FloatToStrF fait appel à FloatToText et
Format fait appel à FmtStr qui fait appel à FormatBuf qui fait appel à FloatToText
jlen100
Messages postés1606Date d'inscriptionsamedi 10 juillet 2004StatutMembreDernière intervention25 juillet 201412 19 juin 2006 à 16:39
Il y a des esprits tordus partout: je suis en train de décortiquer un
code ou le programmeur a utilisé 4 memorystream (avec creation,copie et
destruction) pour assigner un fichier alors qu'il suffisait de faire un
loadfromfile pour les performances c'était pas terrible!! Mais pourquoi
faire simple quand on peut faire compliqué.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 19 juin 2006 à 17:41
je devrais corriger mon tuto sur format en ajoutant les routines standard de convertion.
la plupart du temps, on utilise FloatToStr, IntToStr, elles suffisent bien pour convertir un nombre en une chiane lisible :
S := FloatToStr( Pi );
S := FloatToStr( 180/Pi );
S := IntToStr( 10 ); <= inutile on pourait faire directement S := '10';
S := IntToStr( 10*3+45-6+14 );
viennent aussi les fonctions XToStrDef, XToStrF qui permettent de controller le resultat ou le formatage final.
XToStrDef permet de definir un nombre par defaut si la convertion echoue.
XToStrF permet de controller le formatage (nombre de decimale ect...)
Format ne doit etre utilisée que quand on a plusieurs variable a convertir exemple :
S := 'Position de la souris : '+IntToStr( MousePos.X ) + 'x' + IntToStr( MousePos.Y );
serat facilement remplacable par :
S := Format('Position de la souris : %d x %d',[MousePos.X,MousePos.Y]);
avantage de format c'est qu'elle regroupe la plupart des fonctions sus-nomées et qu'elle en evite plusieurs appel
elle permet de controller la precision, de donner des index au specificateur de format.