cs_Jean-Pierre
Messages postés82Date d'inscriptionjeudi 25 septembre 2003StatutMembreDernière intervention20 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és82Date d'inscriptionvendredi 27 décembre 2002StatutMembreDerniè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és15Date d'inscriptionsamedi 8 janvier 2005StatutMembreDernière intervention28 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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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és2106Date d'inscriptionmardi 10 décembre 2002StatutModérateurDernière intervention15 décembre 20145 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) :
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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 5 févr. 2007 à 18:50
Euh... pardon, je voulais dire la récursitude, lol ^^
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és82Date d'inscriptionvendredi 27 décembre 2002StatutMembreDerniè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és82Date d'inscriptionvendredi 27 décembre 2002StatutMembreDerniè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és82Date d'inscriptionvendredi 27 décembre 2002StatutMembreDerniè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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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és82Date d'inscriptionvendredi 27 décembre 2002StatutMembreDerniè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és1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 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... ^^
10 juil. 2009 à 17:35
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 !
20 févr. 2007 à 17:52
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.
7 févr. 2007 à 07:36
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
7 févr. 2007 à 00:53
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)
6 févr. 2007 à 10:56
Mais ceux qui me connaissent avaient compris :)
A+
6 févr. 2007 à 10:54
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+
5 févr. 2007 à 19:23
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.
5 févr. 2007 à 19:13
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.
5 févr. 2007 à 18:50
5 févr. 2007 à 18:49
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
5 févr. 2007 à 17:38
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
5 févr. 2007 à 15:01
la fonction pos() renvoie zéro
même s'il y a une décimale ?
Quelqu'un en imagine la raison ?
Lucien
5 févr. 2007 à 14:51
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
5 févr. 2007 à 09:31
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à...
5 févr. 2007 à 09:16
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
4 févr. 2007 à 02:40
RDecPart: Extended;
à la ligne 96.
Elle est complètement inutile.
Bonne nuit aux couche-tard... ^^