pbrial
24/05/2004 à 09:15
Bonjour,
Je viens de débuter la programmation sur Palm avec PRC-tools.
Après le classique "Hello World", j'ai voulu faire quelque chose que j'ai cru très simple : afficher un nombre réel (float ou double) dans un champ field.
Le problème, c'est que les champs n'acceptent que des chaines de caractère.
J'ai donc utilisé la fonction C sprintf pour convertir mon réel (d) en chaine (alpha):
sprintf(alpha,"0.3f",d);
Helas, sprintf est reconnu, mais pas le "f" qui indique qu'on a affaire à un flottant...
Comment fait t'on pour convertir un flottant en chaine de caractère sous Palm ?
Merci et à bientôt
Pierre Brial
Patrice
24/05/2004 à 10:49
Pour autant que je sache StrPrintF() ne gère que les nombres entiers, pas les réels. Et sprintf() non plus à mon avis, car je pense que ce n'est qu'une redéfinition.
Pour gérer les réels, il faut utiliser le "Float Panager". Ou la librairie mathlib.
pbrial
24/05/2004 à 12:10
>Vérifie le format dans ton fichier-source. Tu as oublié le signe '%': "%0.3f"
Bien vu. Le '%' était bien dans le fichier source, je l'ai omis en tappant le message.
Je n'ai pas trouvé, dans mathlib, de fonction de convertion flottant->chaine.
Dans le PalmOS float manager, il y a FplFToa(), mais qui sort les nombres en notation scientifique.
Comment vous faites, vous, pour des réels tout simples ?
A bientôt
Pierre
Patrice
24/05/2004 à 13:22
J'utilise pô de réels (les entiers sont tellement plus efficaces)
olivier101
24/05/2004 à 15:38
Je les convertis en entiers.... (partie entrière, partie décimale)
Vineux
26/05/2004 à 20:33
Bonsoir à Tous.
float f = 3169.8677;
=> printf("%.20f",f) = 3169.86767578125000000000
Ca devrait marcher .. aux arrondis 64/32 près, sinon, si ça choque, réduire la précision (1+7 chiffres significatifs pour les 'float')
pbrial
27/05/2004 à 11:10
Bonjour,
Printf, ça marche en ANSI C, mais sur palm ?
Apparemment, les champs d'une forme n'acceptent que du texte, ce qui impose la conversion, mais je ne demande qu'à me tromper...
A bientôt
Pierre
olivier101
27/05/2004 à 14:19
Tu ne te trompes pas. Comme je l'ai déjà dit, à ma connaissance il faut convertir en entier pour l'affichage, ou utiliser un autre sprintf que celui de Palm OS.
Patrice
27/05/2004 à 16:11
100% confirmé (et par la doc aussi

)
Vineux
28/05/2004 à 14:18
Re... de fait pour l'affichage des floats et des chaînes ...
Bref, il y a tout ce qu'il faut dans le fichier FloatMngr.h à découvrir dans le SDK.
Pour passer un float en chaîne, il faut d'abord le passer en double, puis passer ce double en chaîne :
- appliquer f_ftod sur le float pour avoir le double
- appliquer FlpFtoA sur le double pour avoir la chaîne.
Il y a bien sûr les fonctions réciproques (voir le fichier et le manuel) et plein d'autres encore.
Cela doit aussi répondre à l'autre fil relatif au passage des 'double' en 'float' et lycée de Versailles.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez
cliquer ici.