IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez .NET Discussion :

[VB.Net] Convertir un nombre écrit en toutes lettres en un nombre


Sujet :

Contribuez .NET

  1. #1
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut [VB.Net] Convertir un nombre écrit en toutes lettres en un nombre
    Bonjour suite à la visite de Dvp.Net et plus particulièrement cette page j'ai dans l'idée de réaliser cette classe de conversion nombre en toutes lettres en nombre (pour le moment avec des valeurs entières et positives).

    Je sais qu'il ne faut pas vraiment poser de question ici, mais comme c'est en rapport, en fait j'aimerais des précision sur les limitations de la fonction, jusqu'à quel nombre il faut pouvoir aller (minimum syndical au moins).

    En espérant une réponse, pour pouvoir faire fumer mes blanches mains
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    en fait j'aimerais des précision sur les limitations de la fonction, jusqu'à quel nombre il faut pouvoir aller
    Ben je sais pas trop comment on pourrait te répondre... Soit tu as un cahier des charges qui l'indique, soit tu fais comme tu veux

    Plus sérieusement, je pense pas que ce soit beaucoup plus difficile d'aller jusqu'aux décillions que jusqu'au million... c'est juste des chaines en plus à ajouter dans tes tables de référence, le reste du code devrait pas changer beaucoup si tu t'y prends bien dans ton implémentation.

    Pour info, il y a déjà dans la librairie Dvp.Net une classe qui fait le contraire, ça pourra peut-être t'inspirer... (par contre c'est en C#, pas en VB, mais c'est facile à traduire)

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Déjà merci de m'avoir répondu

    Bon en fait cela m'arrange, parce que ce que je craignais c'était plus la limitation "faible".

    À l'heure actuelle, je peux aller jusqu'au novemnonanongentillion donc de ce côté là ça devrait aller, par contre j'ai encore quelques tests à faire (vérification au niveau des regex pour la notation des grands nombres), pas mal de commentaire à mettre, enfin le tralala habituel quoi.

    De toute façon je tiendrai au courant de l'évolution des choses
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    À l'heure actuelle, je peux aller jusqu'au novemnonanongentillion
    Euh... même avec l'article Wikipedia, j'arrive pas à savoir combien ça fait
    A titre indicatif, la classe NumberConverter dans Dvp.Net va jusqu'à UInt64.MaxValue, soit 18 446 744 073 709 551 615...

  5. #5
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Bonjour suite à la visite de Dvp.Net et plus particulièrement cette page j'ai dans l'idée de réaliser cette classe de conversion nombre en toutes lettres en nombre (pour le moment avec des valeurs entières et positives).

    Je sais qu'il ne faut pas vraiment poser de question ici, mais comme c'est en rapport, en fait j'aimerais des précision sur les limitations de la fonction, jusqu'à quel nombre il faut pouvoir aller (minimum syndical au moins).

    En espérant une réponse, pour pouvoir faire fumer mes blanches mains
    Merci pour la proposition !
    C'est un algorithme qui peut être intéressant à développer. Je me suis bien marré à développer l'algo nombre => lettres... J'ai pleuré des larmes de sang aussi, grâce à notre belle langue française et ses cas particuliers...

    L'idée que j'ai pour cette évolution, c'est qu'elle soit l'exact inverse de l'algo de départ. Si tu testes un peu la classe NumberConverter, tu verras que je n'ai pas utilisé de vocabulaire exotique que l'on peut trouver sur Internet. Ainsi pour les grands nombres, je me suis limité aux déclinaisons des termes "milliers", "millions" et "milliards" : "milliers de milliards", "millions de milliards" et "milliards de milliards", ce qui est suffisant pour aller jusqu'à UInt64.Max.
    [EDIT]Je me corrige : j'utilise les termes "billion" et "trillion" également. Ils existent dans le Larousse.[/EDIT]

    Je te propose de commencer comme ça, sinon tu risques de te disperser rapidement avec les multiples variantes qu'il existe et avoir vraiment du mal à produire quelque chose de crédible.
    Qu'en penses-tu ?

  6. #6
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    @Skalp

    Je te remercie de ta réponse, bien qu'un peu tardive (sans reproche aucun) dans le sens où je me suis déjà attaqué au problème de la manière la plus complexe qui soit, à savoir justement en utilisant ce vocabulaire exotique dont tu parles.
    À l'heure actuelle j'ai même obtenu une expression régulière qui fonctionne (et ne maitrisant pas forcément ces expressions j'y ai passé en cumulé 7h30 pour me retrouver avec une expression de presque 700 caractères ) et dont d'ailleurs j'ai posté un sujet pour avoir l'avoir de gens plus expérimentés que moi dans ce domaine.

    Je vais néanmoins garder cette version sous le coude, ne serait-ce que pour ma culture personnelle, et observer le fonctionnement de ta méthode qui me semble plus simple à gérer que mon système où l'utilisateur pouvait aussi bien taper un nombre sous format exotique que "standards" (à coup de milliards de milliards de milliards ^^)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    une expression de presque 700 caractères

    A ce stade, je crois qu'il faut commencer à remettre en question l'utilisation des regex... Perso j'aurais plutôt opté pour un genre de machine d'état qui lit mot par mot (enfin, partie de mot par partie de mot...) en faisant la somme au fur et à mesure

    Sinon, je pense pas que ce soit utile d'aller très loin dans les nombres, UInt64.MaxValue est largement suffisant... le truc c'est que quasiment personne ne connait les noms des nombres au delà de cette valeur, et personne ne parle jamais de "novemnonanongentillion" (sauf pour se la péter en soirée )

  8. #8
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par tomlev Voir le message

    A ce stade, je crois qu'il faut commencer à remettre en question l'utilisation des regex... Perso j'aurais plutôt opté pour un genre de machine d'état qui lit mot par mot (enfin, partie de mot par partie de mot...) en faisant la somme au fur et à mesure

    Sinon, je pense pas que ce soit utile d'aller très loin dans les nombres, UInt64.MaxValue est largement suffisant... le truc c'est que quasiment personne ne connait les noms des nombres au delà de cette valeur, et personne ne parle jamais de "novemnonanongentillion" (sauf pour se la péter en soirée )
    Je suis en totale adéquation avec ceci, ce fut d'ailleurs la raison initiale de ce post, partant du principe que <<ok j'ai trouvé comment on peut nommer ces "aberrations" que personne n'utilise mais ai-je besoin d'aller aussi loin ?>> (au passage je me suis emmêlé les pinceaux techniquement le nom de ce nombre ce serait nove-nonaginta-nongenti-llion [très d'unions rajoutés pour la lisibilité ]) D'ailleurs je tire d'avance mon chapeau à celui/celle qui arriverais d'une manière fluide et censé dans une conversation

    J'ai parcouru rapidement la source de Skalp sur l'opération inverse, qui a l'air plutôt bien faite, pour ce soir je laisse reposer chercher cette expression régulière m'a lessivé et ce n'est pas comme si j'avais une deadline à respecter
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  9. #9
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    (au passage je me suis emmêlé les pinceaux techniquement le nom de ce nombre ce serait nove-nonaginta-nongenti-llion [très d'unions rajoutés pour la lisibilité ]) D'ailleurs je tire d'avance mon chapeau à celui/celle qui arriverais d'une manière fluide et censé dans une conversation
    C'est un peu tiré par les cheveux, en effet.

    Je me corrige car je viens de voir que j'utilise les termes "billion" et "trillion" également (car ils existent dans le Larousse).

Discussions similaires

  1. Convertir un nombre en toutes lettres
    Par herroP dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 22/02/2013, 15h38
  2. Convertir un "nombre en toute lettre" en nombre
    Par Schnuffel dans le forum Langage
    Réponses: 0
    Dernier message: 15/06/2010, 11h09
  3. [ASA]Conversion de nombres decimaux en toute lettre
    Par Fab_57 dans le forum Sybase
    Réponses: 1
    Dernier message: 22/08/2006, 14h49
  4. [VB.Net] Convertir un nombre au format double en date
    Par Immobilis dans le forum ASP.NET
    Réponses: 6
    Dernier message: 14/11/2005, 15h34
  5. Réponses: 2
    Dernier message: 19/01/2005, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo