CONVERSION LITTÉRALE D'UN NOMBRE ENTIER OU FLOTTANT

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 - 4 févr. 2007 à 02:40
cs_Jean-Pierre Messages postés 82 Date d'inscription jeudi 25 septembre 2003 Statut Membre Dernière intervention 20 avril 2010 - 10 juil. 2009 à 17:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41357-conversion-litterale-d-un-nombre-entier-ou-flottant

cs_Jean-Pierre Messages postés 82 Date d'inscription jeudi 25 septembre 2003 Statut Membre Dernière intervention 20 avril 2010
10 juil. 2009 à 17:35
Bonjour,

Ce petit mot d'encouragement, car je trouve absolument dég******** la note de 3 apportée à ce source.

Un code comme ça mérite au moins le triple, voilà qui est dit !

Un 10 et bravo Japee !
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
20 févr. 2007 à 17:52
Salut Mauricio,

Je prends note de tes suggestions pour une évolution future de mon code. Merci pour tes commentaires qui sont constructifs et utiles, comme d'habitude.
Je suis allé faire un tour du côté de la source que tu as publiée sur le sujet, mais n'ai pas eu le temps de la tester. Je le ferai dès que possible.
Quand à la limace visqueuse qui m'a collé un 3 sans laisser la moindre explication, je ne lui dirai pas ce que je pense de ce genre de comportement : il ne comprendrait sans doute pas plus qu'il ne comprend quelque chose à la programmation.
cs_lucien Messages postés 82 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 juin 2007
7 févr. 2007 à 07:36
Pour Japi,
Je vois que tu viens de déposer une mise à jour que je vais découvrir...J'aurais aimé qu'elle contienne (peut-être est-ce le cas ?) une option pour choisir le nombre de décimales...Il est parfois utile d'en avoir plus de deux...
Merci,
Lucien
bongenie Messages postés 15 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 28 octobre 2010
7 févr. 2007 à 00:53
Personnellement, je préfère gérer le problème de la virgule de façon autoritaire dès l'appui de la touche, à savoir :
procedure TForm1.edFloatOnKeyPress(Sender: TObject; var Key: Char);
begin
if key=',' then key:='.';
end;

Les problèmes compliqués ont souvent des réponses simples ;-) (bien sûr si on veut vraiment voir la vrai virgule c'est un autre problème)
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
6 févr. 2007 à 10:56
J' ai oublié de préciser que ma fonction renvoit le résultat en portugais et non pas en français!
Mais ceux qui me connaissent avaient compris :)
A+
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
6 févr. 2007 à 10:54
Salut Japee,

pas si simple comme fonction!
J'ai fait la même il y a longtemps et voici les paramètres que j' ai utilisé, ça pourrait t' aider à améliorer ta fonction (je traduis les paramètres) :

function REAL_PARA_LETRAS(Valeur: Double; NbDecimaux: Word;
Prefix_Intier: String; Separateur_Decimaux: String;
Prefixo_Decimaux: String; Forcer_Decimaux: Boolean;
Decimaux_Zeros_A_gauche: Boolean): String;

Ainsi, 2.06 peut être ecrit selon les paramètres:
"deux euros et six centimes"
"deux virgule zero six centimètres" (Decimaux_Zeros_A_gauche=true)
etc ...

Ainsi, 4.0 peut être ecrit selon les paramètres:
"quatre euros" (Forcer_Decimaux=false)
"quatre euros et zero centime" (Forcer_Decimaux=true)
etc ...

L' idée est de pouvoir utiliser la fonction pour les euros ou des mesures parce que :
2 virgule six <> 2 virgule zero six

A+
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 févr. 2007 à 19:23
Salut WhiteHippo,

Oh oui, bien vu !
C'est vrai qu'elle est pas jolie, jolie, cette procedure, je ne l'aime pas trop, alors je l'ai un peu négligée...

Je rectifierai dans la prochaine mise à jour.

Merci.
WhiteHippo Messages postés 1154 Date d'inscription samedi 14 août 2004 Statut Membre Dernière intervention 5 avril 2012 3
5 févr. 2007 à 19:13
Bonsoir Japee

Il me semble que tu devrais remplacer dans ta procédure SeparateIntDec les appels à "StrToIntDef" par des appels à "StrToInt64Def" afin de profiter pleinement des valeurs sur 64 bits.

Cordialement.
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 févr. 2007 à 18:50
Euh... pardon, je voulais dire la récursitude, lol ^^
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 févr. 2007 à 18:49
Le problème n'est pas dans StrToFloatDef qui remplit parfaitement son contrat.

Il faut modifier la procedure SeparateIntDec() dans unit Num2Let,
en remplaçant les 3 lignes d'instructions où il est fait mention de ',' par DecimalSeparator, ce qui donne :

procedure SeparateIntDec(Value: Extended; var IntPart, DecPart: Int64;
const N: Byte = 2);
var
S, sIntPart, sDecPart: string;
P: Byte;
begin
S := FloatToStr(Value); // uses SysUtils
P := Pos(DecimalSeparator, S);
if P = 0 then
begin
IntPart := Int64(Trunc(Value));
DecPart := 0;
end
else
begin
sIntPart := Copy(S, 1, Pos(DecimalSeparator, S) - 1);
sDecPart := Copy(S, Pos(DecimalSeparator, S) + 1, 2);
IntPart := StrToIntDef(sIntPart, 0);
if Length(sDecPart) = 2 then
DecPart := StrToIntDef(sDecPart, 0)
else
DecPart := StrToIntDef(sDecPart + '0', 0);
end;
end;

Je corrigerai plus tard, ce soir sans doute.

Merci de ta vigilance.

Il n'est pas inutile de toute manière d'introduire une fonction de filtrage de la validité de saisie (nombreux sources sur le site, voir l'excellente source de Cirec et son Edit magique).

En effet, je ne vais pas à fond dans ce sens, ça sera l'objet d'améliorations de cette unité, mais ça n'est pas le fond du propos. l'Intérêt tient surtout à l'utilisation de la récursion pour accomplir la conversion des chiffres aux lettres.

A plus.

japee
cs_lucien Messages postés 82 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 juin 2007
5 févr. 2007 à 17:38
Je crois qu'il y a un pb de logique, dans la fonction StrToFloatDef ?
DecimalSeparator est une variable environnementale indépendante du prog.
Si elle est sur Point (comme chez moi) au lieu de virgule (ce qui semble être le cas sur ta machine ?) la chaine d'éditfloat
peut avoir une virgule ou un point. Dans ce dernier cas, elle ne sera pas modifiée, d'où une erreur dans la procédure d'analyse SeparateIntDec qui recherche une Virgule....:)
Lucien
cs_lucien Messages postés 82 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 juin 2007
5 févr. 2007 à 15:01
Dans "SeparateIntDec"
la fonction pos() renvoie zéro
même s'il y a une décimale ?
Quelqu'un en imagine la raison ?
Lucien
cs_lucien Messages postés 82 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 juin 2007
5 févr. 2007 à 14:51
Désolé pour l'horreur...
mais je ne trouve pas de solution !
Il faut que je poursuive mon enquête...
Dans l'editfloat, si je tape 12525,
la réponse est correcte
si je déplace le curseur avant la deuxième décimale, soit 125.ou,25 la réponse est zéro virgule zéro !!!
Il y a un vice quelque part...
Est-ce que mon XP pro et mon D6 pro peuvent avoir une influence ?
Lucien
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
5 févr. 2007 à 09:31
Salut Lucien.

Je viens d'essayer la version que j'ai postée, on ne sait jamais.
Voici le copier-coller de ce que j'obtiens si je saisis "126.25" :
"cent vingt-six virgule vingt-cinq",
et pareil si je saisis "126,25".
Alors ?
Tu m'as foutu les jetons, là...
cs_lucien Messages postés 82 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 juin 2007
5 févr. 2007 à 09:16
Bonjour Japee,
je ne comprends pas...
Si je saisis 126.25
j'obtiens «cent ving six virgule zéro»
comme si les décimales n'étaient pas prises en compte ?
Si tu trouves avant moi,
Merci de nous le dire!
Lucien
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
4 févr. 2007 à 02:40
En attendant la mise à jour (demain), vous pouvez enlever cette variable :
RDecPart: Extended;
à la ligne 96.
Elle est complètement inutile.
Bonne nuit aux couche-tard... ^^
Rejoignez-nous