Aide - Recherche - Membres - Calendrier
Version complète : sprintf et flottants sur Palm
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
pbrial
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
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
>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
J'utilise pô de réels (les entiers sont tellement plus efficaces) anim_wink.gif
olivier101
Je les convertis en entiers.... (partie entrière, partie décimale)
Vineux
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
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
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
100% confirmé (et par la doc aussi anim_wink.gif )
Vineux
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.
Invision Power Board © 2001-2008 Invision Power Services, Inc.