Fonction pour convertir un extended en string?

Signaler
Messages postés
89
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
30 avril 2020
-
Messages postés
94
Date d'inscription
mardi 9 mai 2006
Statut
Membre
Dernière intervention
1 mars 2008
-
Salut,


j'ai une question très simple, je voudrais conertir un type extended en un type string.


Merci d'avance


@+




 

13 réponses

Messages postés
89
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
30 avril 2020

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

merci

@+
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
salut,


vas voir dans l'aide:


function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision, Digits: Integer): string; overload;

function FloatToStrF(Value: Extended; Format: TFloatFormat; Precision,
Digits: Integer; const FormatSettings: TFormatSettings): string;
overload;


Description


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.
Messages postés
89
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
30 avril 2020

Salut,

Merci beaucoup Jlen 100 pour ta longue réponse.

Néanmois, je n'arrive pas à faire fonctionner cette fonction correctement.

Pourrais tu me donner un exemple concrêt.

Avec mes sincères remerciements

@+
Messages postés
89
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
30 avril 2020

C'est bon merci, j'ai vu ou été mon erreur

Merci encore

@+
Messages postés
3818
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 septembre 2020
34
Salut à tous,

et l'ami F0xi dirait:   "NOOOON

Il faut utiliser Format :   la seul fonction qui fait tout sauf le café"

Ceci dit la réponse de Jlen convient parfaitement.

Mais rien ne t’empêche d'aller voir l'excellent tutoriel de F0xi sur le Formatage des Chaines

@+
Cirec
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
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 )


@+

jlen
Messages postés
3818
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 septembre 2020
34
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.
















@+
Cirec
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
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.


@+

jlen
Messages postés
3818
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
18 septembre 2020
34
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

@+
Cirec
Messages postés
1606
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
25 juillet 2014
11
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é.


@+

jlen
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
32
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.
Messages postés
89
Date d'inscription
mardi 17 juin 2003
Statut
Membre
Dernière intervention
30 avril 2020

Salut,

Je vous remercie pour toutes ces information, j'étudie actuellement le tuto de fOxi.

Merci encore

@+
Messages postés
94
Date d'inscription
mardi 9 mai 2006
Statut
Membre
Dernière intervention
1 mars 2008

salut !
stigmate101 je t'en suplie ^^ clique réponse accepté c'est la 5eme fois que je rentre ici

merci et @+

N*M*B