|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 5 ![]() |
Bonjour,
Dans un DSPF, j'utilise une zone numérique définie de la façon suivante : Name++++++RLen++TDpBLinPos YC_PRXVIG 6 2B 13 17 Cette zone est en saisie et j'aimerais savoir s'il existe une astuce afin que lors de la saisie du prix, la saisie d'un point ou d'une virgule soit considérée comme un séparateur décimal. Actuellement, seule la virgule fonctionne, avec le point ça ne fonctionne pas. Par exemple, si je saisis 4.75 , dans la zone je me retrouve avec 475 ... Si ce n'est pas possible que le point et la virgule soient définies comme séparateur décimal simultanément, comment définir le point comme séparateur pour une seul RPG ? Merci d'avance pour vos idées. |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Citation:
Citation:
Avec un zéro avant le point - Exemple : 0.123 |
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 5 ![]() |
J'ai testé en rajoutant DECEDIT('.') en carte H , le résultat reste le même, lors de la saisie de la zone, le point n'est pas pris en compte et mon fichier est alimenté avec une valeur fausse. (idem avec DECEDIT('0.')
Par contre en faisant un CHGJOB DECFMT(*BLANK) avant l'appel de mon RPGLE et un CHGJOB DECFMT(J) après l'appel, j'obtiens bien le résultat voulu ... mais cette solution ne me plait pas trop. |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Il faut que tu indiques un Edit Code dans les DDS de ton écran :
Ici, j'ai choisi le code édition " L " pour afficher le cas échéant un zéro avant la virgule ou le point et le signe à droite (0,123-), mais tu peux en choisir un autre à ta convenance parmi ceux qui suivent : Code :
|
||
|
|
00
|
|
|
#5 | ||||||
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 5 ![]() |
Merci pour tes réponses Mercure,
je ne me suis pas très bien expliqué alors rien de tel que des images parlantes. J'ai bien un EDTCDE(4) dans mon DSPF j'ai testé sur un prog avec juste une zone et voici ce que ça me donne : Description DSPF Code :
Code :
Dans la zone s'affichant, je saisis 4.01. A l'écran, j'ai bien 4.01 qui s'affiche mais voici ce que je récupère dans ma zone à la sortie du EXFMT : Code :
Mon boss va être OK de multiplier le prix par 100 mais les clients risquent de pleurer
|
||||||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Mais c'est parce que tu te contredis ! En effet, dans ton programme, tu as spécifié c'est à dire que tu vas employer le point décimal dans tout le programme, y compris lors de la saisie écran.
et tu saisis la valeur avec une virgule au lieu d'un point. Il faut que tu sois cohérent et fasses ta saisie en conformité avec la spécif H. Remarque Qu'est ce que c'est que cet "eval YC_PRXVIG = 3,89" au beau milieu du programme ? |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : décembre 2010 Messages : 5 ![]() |
Non non, j'ai bien saisi 4 point 01 dans la zone
Le 3,89 c'est pour simuler l'initialisation de la zone, vu que dans le "vrai" programme, cette zone est initialisée à partir d'un fichier. Mais même en supprimant cette ligne, j'obtiens le même résultat. |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Je viens de tester sur un iSeries V5R3 avec EDTCDE(4) et DECEDIT('.') et ça marche à tous les coups. J'ai vérifié sous debug. Mais évidemment, si tu tapes 4,01 (avec virgule), tu obtiens bien 401.00 car la virgule n'est plus significative à cause de la spécif H.
Refais un test, tu dois te tromper quelque part. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com