convertir des chiffres litéraus en nombre - PHP - Programmation
Marsh Posté le 08-12-2020 à 13:14:32
Dans mon soft CanteenCalandreta, j'ai utilisé ce script Nuts.php :
Code :
|
Ca marche bien Je m'en sers pour faire des reçus fiscaux.
Marsh Posté le 08-12-2020 à 15:24:27
Salut rufo, merci pour ta réponse.
Dans le commentaire en haut je lis "Conversion d'un nombre quelconque en lettres."
C'est l'inverse que je cherche
Marsh Posté le 08-12-2020 à 18:54:08
Ah, mince, j'ai lu trop vite.
La lib que j'ai postée pourra peut-être t'aider pour faire l'algo à l'envers.
Marsh Posté le 09-12-2020 à 21:32:32
Il te faut un - mot anglais: "Parser". C'est toujours très drôle à écrire à la main... Il y a des générateurs ("parser generator" ) genre Yacc et machin mais je pense que ça doit faire usine à gaz. Sinon sur internet rien de tout fait?
Marsh Posté le 09-12-2020 à 21:49:50
Yacc et lex, non ?
Marsh Posté le 09-12-2020 à 21:53:53
Lex c'est un "lexer", pas un "parser", mais franchement ne me demande pas la différence, je suis pas ingé en info moi... Il faut les deux pour faire un compilateur, ça je le sais.
PS: Je suis tatillon mais ça me fait mal à l'oeil à chaque fois que je vais dans cette cat: chiffres litérauX.
Marsh Posté le 09-12-2020 à 22:28:13
Je les ai un peu étudié en école d'ingé. Les 2 permettent de créer une grammaire et un vocabulaire afin de créer un compilateur.
Tu crées un corpus et Lex va permettre de créer le scan line pour analyser la ligne. Yacc va s'occuper de la grammaire et de compiler le tout.
Mais bon, pour ce qu'il veux faire, c'est too much.
Marsh Posté le 09-12-2020 à 22:44:05
oui un eu trop much
Je suis sur le point d'y arriver avec un algo basic qu'un lycéen pourrait écrire
J'arrive à convertir ca par exemple :
deux cents quarante deux million quatre cent quatre vingt dix huit mille six cents vingt huit
l'algo est assez simple au final :
DIX HUIT , c'est 10 + 8
CENT VINGT DEUX, c'est 100 + 20 + 2
TROIS CENTS c'est 3 * 100
TROIS CENTS VINGT DEUX : 3 * 100 + 20 + 2
SOIXANTE DIX SEPT : 60 + 10 + 7
Il faut deviner où mettre un plus, un fois, et une petite table de correspondance de chaîne en nombre (de un à seize, chaque dizaine, quatrevingt, cents, mille, million).
Petit soucis encore quand j'ai mille et cent qui se suivent, par exemple avec quatre cent mille cent six (4*100*1000*100+6 : ca marche pas )
Mais pas grand chose, un if à ajouter quelque part.
Marsh Posté le 11-12-2020 à 19:55:24
Je n'ai pas eu le temps de finir, mais oui en lisant mot à mot ta chaîne de caractères c'est quand même faisable. Ta récursion prend en paramètre la phrase, le nombre, le coefficient et la base.
Pour l'instant j'étais parti sur les cas :
- coefficient suivi d'un coefficient = coefficient composé (dix-huit) donc coefficient n + coefficient n+1, à voir s'il faut traiter par le tiret.
- coefficient suivi de la base = coefficient x base
- base suivie de la base = nombre x base
- initialisation par coefficient = 1 si base détectée ou coefficient = coefficient si coefficient détecté
Mais comme toi ça chiadait avec ton exemple, je pense qu'il faut reset la base après qu'on ait une base qui suit une base.
Marsh Posté le 08-12-2020 à 09:35:28
Bonjour,
C'est plus un problème d'algo que de php.
J'ai besoin de convertir des nombre écrit en lettre, en chiffre. Mais pas juste UN, DEUX, TROIS, cela doit aller jusqu'au MILLION.Exemple :
TROIS CENTS MILLE QUARANTE DEUX sera convertit en 300042
des idées ?
Merci
Pierre
---------------
Du tofu en Alsace : www.tofuhong.com