Neozix
Messages postés33Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention25 avril 2003
-
18 févr. 2003 à 20:46
arnaud69009
Messages postés1Date d'inscriptionjeudi 27 mai 2010StatutMembreDernière intervention27 mai 2010
-
27 mai 2010 à 16:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
arnaud69009
Messages postés1Date d'inscriptionjeudi 27 mai 2010StatutMembreDernière intervention27 mai 2010 27 mai 2010 à 16:57
Bonjour,
Je vous remercie pour les codes, à moi donc d'ajouter ma pierre à l'édifice et vous proposant une version qui (normalement) respecte les "-" et les "s" et permet aussi de tenir compte (si l'on veut) des recommandations de 1990 liées à l'écriture des nombres.
y a encore de l'optimisation à faire .... mais ça marche.
public class NombreEnLettre {
/**
* Représentaion en lettre de 0
*/
public static final String ZERO = "zéro";
/**
* Représentaion en lettre de 1
*/
public static final String UN = "un";
/**
* Représentaion en lettre de 2
*/
public static final String DEUX = "deux";
/**
* Représentaion en lettre de 3
*/
public static final String TROIS = "trois";
/**
* Représentaion en lettre de 4
*/
public static final String QUATRE = "quatre";
/**
* Représentaion en lettre de 5
*/
public static final String CINQ = "cinq";
/**
* Représentaion en lettre de 6
*/
public static final String SIX = "six";
/**
* Représentaion en lettre de 7
*/
public static final String SEPT = "sept";
/**
* Représentaion en lettre de 8
*/
public static final String HUIT = "huit";
/**
* Représentaion en lettre de 9
*/
public static final String NEUF = "neuf";
/**
* Représentaion en lettre de 10
*/
public static final String DIX = "dix";
/**
* Représentaion en lettre de 11
*/
public static final String ONZE = "onze";
/**
* Représentaion en lettre de 12
*/
public static final String DOUZE = "douze";
/**
* Représentaion en lettre de 13
*/
public static final String TREIZE = "treize";
/**
* Représentaion en lettre de 14
*/
public static final String QUATORZE = "quatorze";
/**
* Représentaion en lettre de 15
*/
public static final String QUINZE = "quinze";
/**
* Représentaion en lettre de 16
*/
public static final String SEIZE = "seize";
/**
* Représentaion en lettre de 20
*/
public static final String VINGT = "vingt";
/**
* Représentaion en lettre de 30
*/
public static final String TRENTE = "trente";
/**
* Représentaion en lettre de 40
*/
public static final String QUARANTE = "quarante";
/**
* Représentaion en lettre de 50
*/
public static final String CINQUANTE = "cinquante";
/**
* Représentaion en lettre de 60
*/
public static final String SOIXANTE = "soixante";
/**
* Représentaion en lettre de 100
*/
public static final String CENT = "cent";
/**
* Représentaion en lettre de 1000
*/
public static final String MILLE = "mille";
/**
* Représentaion en lettre de 1000000
*/
public static final String MILLION = "million";
/**
* Représentaion en lettre de 1000000000
*/
public static final String MILLIARD = "milliard";
/**
* Représentaion en lettre de -
*/
public static final String MOINS = "moins";
// Nom des différents types de paquet de nombre
private static final String[] tab = { "", MILLE, MILLION, MILLIARD, MILLE + " " + MILLIARD,
MILLION + " de " + MILLIARD, MILLIARD + " de " + MILLIARD };
/**
* Renvoie la représentation en lettre d'un chiffre, c'est à dire d'un
* nombre ente 0 et 9
*/
public static String getChiffre(int l) {
if ((l < 0) || (l > 9))
throw new IllegalArgumentException("Un chiffre est entre 0 et 9, donc " + l + " est interdit");
switch (l) {
case 0:
return ZERO;
case 1:
return UN;
case 2:
return DEUX;
case 3:
return TROIS;
case 4:
return QUATRE;
case 5:
return CINQ;
case 6:
return SIX;
case 7:
return SEPT;
case 8:
return HUIT;
case 9:
return NEUF;
}
return null;
}
// Retourne la représentation en lettre d'un paquet. Un paquet est formé de
// tois chiffres, comme 123, 012, 001, 100, 101,...
private static String paquet(int p) {
// On initialise la réponse
String reponse = "";
if (p == 100) {
reponse = CENT;
return reponse.trim();
}
// Si on a un chiffre des centaines
if (p > 100) {
// Si la valeur est >199 alors, on va mettre devant le chiffre des
// centaine
if (p / 100 > 1)
reponse = getChiffre(p / 100) + " ";
// C'est une centaine, donc on ajoute ensuite "cent"
// On récupére ce qui n'est pas la centaine
p = p % 100;
}
// c chiffre des dizaines
// u chiffre des unitées
int c = p / 10;
int u = p % 10;
switch (c) {
// Si la dizaine est nulle, alors le nombre est un chiffre
case 0:
if (u != 0)
reponse += getChiffre(u);
break;
case 1:
switch (u) {
case 0:
reponse += DIX;
break;
case 1:
reponse += ONZE;
break;
case 2:
reponse += DOUZE;
break;
case 3:
reponse += TREIZE;
break;
case 4:
reponse += QUATORZE;
break;
case 5:
reponse += QUINZE;
break;
case 6:
reponse += SEIZE;
break;
default:
reponse += DIX + "-" + getChiffre(u);
}
break;
case 2:
reponse += VINGT;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
if (u == 0)
reponse += "s";
break;
case 3:
reponse += TRENTE;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
break;
case 4:
reponse += QUARANTE;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
break;
case 5:
reponse += CINQUANTE;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
break;
case 6:
reponse += SOIXANTE;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
break;
case 7:
reponse += SOIXANTE;
if (u == 1)
reponse += " et";
switch (u) {
case 0:
reponse += "-" + DIX;
break;
case 1:
reponse += " " + ONZE;
break;
case 2:
reponse += "-" + DOUZE;
break;
case 3:
reponse += "-" + TREIZE;
break;
case 4:
reponse += "-" + QUATORZE;
break;
case 5:
reponse += "-" + QUINZE;
break;
case 6:
reponse += "-" + SEIZE;
break;
default:
reponse += "-" + DIX + "-" + getChiffre(u);
}
break;
case 8:
reponse += QUATRE + "-" + VINGT;
if (u > 0)
reponse += "-" + getChiffre(u);
if (u == 0)
reponse += "s";
break;
case 9:
reponse += QUATRE + "-" + VINGT + "-";
switch (u) {
case 0:
reponse += DIX;
break;
case 1:
reponse += ONZE;
break;
case 2:
reponse += DOUZE;
break;
case 3:
reponse += TREIZE;
break;
case 4:
reponse += QUATORZE;
break;
case 5:
reponse += QUINZE;
break;
case 6:
reponse += SEIZE;
break;
default:
reponse += DIX + "-" + getChiffre(u);
}
break;
}
// On renvoie la réponse, à laquelle on retire les éventuels espaces
// surperflus
return reponse.trim();
}
public static String convert(String w){
int p1 = w.indexOf(".");
int p2 = w.indexOf(",");
if (p1!=-1){
String partieEntiere = w.substring(0,p1);
String partieVirgule = w.substring(p1+1);
w = NombreEnLettre.getLettre(partieEntiere)+" virgule "+NombreEnLettre.getLettre(partieVirgule);
}
if (p2!=-1){
String partieEntiere = w.substring(0,p2);
String partieVirgule = w.substring(p2+1);
w = NombreEnLettre.getLettre(partieEntiere)+" virgule "+NombreEnLettre.getLettre(partieVirgule);
}
if ( (p1 == -1) && (p2==-1)){
// nombre entier
return NombreEnLettre.getLettre(w);
}
return w;
}
public static String getLettre(String w) {
w = w.trim();
String rep = w;
try {
long number = Long.parseLong(w);
rep = NombreEnLettre.getLettre(number);
} catch (NumberFormatException nfe) {
System.out.println("Conversion impossible.... n'est pas un nombre");
}
return rep;
}
private static String checkForMilliard(String w) {
try{
int p = w.indexOf("milliards");
if (p != -1) {
w = w.substring(0, p - 1) + " " + w.substring(p, p + 9) + " " + w.substring(p + 10);
return w;
}
p = w.indexOf("milliard");
if (p != -1) {
w = w.substring(0, p - 1) + " " + w.substring(p, p + 8) + " " + w.substring(p + 9);
return w;
}
}catch (Exception e){
w = w.replaceAll("-", " ");
}
return w;
}
private static String checkForMillion(String w) {
try{
int p = w.indexOf("millions");
if (p != -1) {
w = w.substring(0, p - 1) + " " + w.substring(p, p + 8) + " " + w.substring(p + 9);
return w;
}
p = w.indexOf("million");
if (p != -1) {
w = w.substring(0, p - 1) + " " + w.substring(p, p + 7) + " " + w.substring(p + 8);
return w;
}
}catch (Exception e){
w = w.replaceAll("-", " ");
}
return w;
}
public static String checkForVirgule(String w){
int p = w.indexOf("-virgule-");
if (p!=-1){
String s[] = w.split("-virgule-");
w = s[0]+" virgule "+s[1];
}
return w;
}
public static String convertToRecommandation1990(String w) {
w = w.replaceAll(" ", "-");
w = NombreEnLettre.checkForMilliard(w);
w = NombreEnLettre.checkForMillion(w);
w = NombreEnLettre.checkForVirgule(w);
return w;
}
/**
* Renvoie le nombre en lettre,
* ex: 1234567890 devient : un milliard deux cent trente quatre million cinq
* cent soixante sept mille huit cent quatre vingt dix
*/
public static String getLettre(long l) {
// Cas zéro
if (l == 0L)
return ZERO;
String signe = "";
// Cas négatif
if (l < 0L) {
// On prned la valeur absolue
l = -l;
// On ajoutera moins devant
signe = MOINS + " ";
}
// Initilisation de la réponse
String reponse = "";
// Rang du paquet actuel, on va parcourir le nombre de gauche à droite,
// le premier paquet de 123456 sera donc : 456
int rang = 0;
while (l > 0L) {
String pluriel = "";
if (tab[rang].equals("million") || tab[rang].equals("milliard")) {
if ((l % 1000L) > 1)
pluriel = "s";
}
// on ajoute le paquet devant la réponse
if ((l % 1000L)!=0)
reponse = paquet((int) (l % 1000L)) + " " + tab[rang] + pluriel + " " + reponse;
if (tab[rang].equals("mille") && (l % 1000L == 1)) {
reponse = reponse.substring(3);// on enleve "un "
}
// on passe au paquet suivant
l = l / 1000L;
rang++;
}
nabilham9128113
Messages postés6Date d'inscriptionvendredi 4 janvier 2008StatutMembreDernière intervention 5 janvier 2010 8 janv. 2010 à 13:39
EREUUUUUUUUUUUUUUUUUUUR lol.
Ta source est vraiment intéressante , mais je viens de trouver une erreur , ça sera géniale de la corriger.
C'est en fait pour les centaines :
Par exemple : 55100 donne cinquante cinq mille (ce qui faux)
et pire : 100 ne retourne aucun résultat !!!
cs_manolli
Messages postés1Date d'inscriptionvendredi 9 octobre 2009StatutMembreDernière intervention 1 décembre 2009 1 déc. 2009 à 02:38
bonjour
comment faire pr telechargez le zip
merci
midotueur
Messages postés3Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention17 avril 2009 17 avril 2009 à 00:55
merci pour ce code ca m'était vraiment trés utile
cs_Wilfreed
Messages postés1Date d'inscriptionvendredi 23 janvier 2009StatutMembreDernière intervention27 janvier 2009 27 janv. 2009 à 12:22
Bjr
J'ai essayer d'exécuter ce programme dans Netbeans et il m'a indiquer deux erreurs que je ne comprend pas
La Première: au niveau de la déclaration du Package "Utilitaires"
La Deuxième: au niveau de la déclaration de la classe "Nombre"(il me dit que nombre est une claase public donc je dois
mettre le .Java devant et quand je le fais, il me montre tjrs qu'il y une erreur. svp aimez moi. A plus et Merci...
Abdelelansari
Messages postés21Date d'inscriptionsamedi 12 janvier 2008StatutMembreDernière intervention29 mars 2008 9 févr. 2008 à 20:03
Je connais pas ce genre de programation et je te demande si tu peux l'ecrire en VB et Merci
marwenjava
Messages postés15Date d'inscriptionvendredi 10 février 2006StatutMembreDernière intervention17 octobre 2009 20 janv. 2008 à 22:50
Mon ami tu a fé la partie la plus Dur et Voila une petite retouche pour votre travail en utilisant lé double :
public class Nombre
{
/**
* Représentaion en lettre de 0
*/
public static final String ZERO="zéro";
/**
* Représentaion en lettre de 1
*/
public static final String UN="un";
/**
* Représentaion en lettre de 2
*/
public static final String DEUX="deux";
/**
* Représentaion en lettre de 3
*/
public static final String TROIS="trois";
/**
* Représentaion en lettre de 4
*/
public static final String QUATRE="quatre";
/**
* Représentaion en lettre de 5
*/
public static final String CINQ="cinq";
/**
* Représentaion en lettre de 6
*/
public static final String SIX="six";
/**
* Représentaion en lettre de 7
*/
public static final String SEPT="sept";
/**
* Représentaion en lettre de 8
*/
public static final String HUIT="huit";
/**
* Représentaion en lettre de 9
*/
public static final String NEUF="neuf";
/**
* Représentaion en lettre de 10
*/
public static final String DIX="dix";
/**
* Représentaion en lettre de 11
*/
public static final String ONZE="onze";
/**
* Représentaion en lettre de 12
*/
public static final String DOUZE="douze";
/**
* Représentaion en lettre de 13
*/
public static final String TREIZE="treize";
/**
* Représentaion en lettre de 14
*/
public static final String QUATORZE="quatorze";
/**
* Représentaion en lettre de 15
*/
public static final String QUINZE="quinze";
/**
* Représentaion en lettre de 16
*/
public static final String SEIZE="seize";
/**
* Représentaion en lettre de 20
*/
public static final String VINGT="vingt";
/**
* Représentaion en lettre de 30
*/
public static final String TRENTE="trente";
/**
* Représentaion en lettre de 40
*/
public static final String QUARANTE="quarante";
/**
* Représentaion en lettre de 50
*/
public static final String CINQUANTE="cinquante";
/**
* Représentaion en lettre de 60
*/
public static final String SOIXANTE="soixante";
/**
* Représentaion en lettre de 100
*/
public static final String CENT="cent";
/**
* Représentaion en lettre de 1000
*/
public static final String MILLE="mille";
/**
* Représentaion en lettre de 1000000
*/
public static final String MILLION="million";
/**
* Représentaion en lettre de 1000000000
*/
public static final String MILLIARD="milliard";
/**
* Représentaion en lettre de -
*/
public static final String MOINS="moins";
//Nom des différents types de paquet de nombre
private static final String[] tab={"",MILLE,MILLION,MILLIARD,MILLE+" "+MILLIARD,
MILLION+" de "+MILLIARD,MILLIARD+" de "+MILLIARD};
/**
* Renvoie la représentation en lettre d'un chiffre, c'est à dire d'un nombre ente 0 et 9
*/
public static String getChiffre(int l)
{
if((l<0)||(l>9))
throw new IllegalArgumentException("Un chiffre est entre 0 et 9, donc "+l+" est interdit");
switch(l)
{
case 0 :
return ZERO;
case 1 :
return UN;
case 2 :
return DEUX;
case 3 :
return TROIS;
case 4 :
return QUATRE;
case 5 :
return CINQ;
case 6 :
return SIX;
case 7 :
return SEPT;
case 8 :
return HUIT;
case 9 :
return NEUF;
}
return null;
}
//Retourne la représentation en lettre d'un paquet. Un paquet est formé de tois chiffres, comme 123, 012, 001, 100, 101,...
private static String paquet(int p)
{
//On initialise la réponse
String reponse="";
//Si on a un chiffre des centaines
if(p>100)
{
//Si la valeur est >199 alors, on va mettre devant le chiffre des centaine
if(p/100>1)
reponse=getChiffre(p/100)+" ";
//C'est une centaine, donc on ajoute ensuite "cent"
reponse += CENT+" ";
//On récupére ce qui n'est pas la centaine
p=p%100;
}
//c chiffre des dizaines
//u chaiffre des unitées
int c=p/10;
int u=p%10;
switch(c)
{
//Si la dizaine est nule, alors le nombre est un chiffre
case 0 :
if(u!=0)
reponse += getChiffre(u);
break;
case 1 :
switch(u)
{
case 0 :
reponse += DIX;
break;
case 1 :
reponse += ONZE;
break;
case 2 :
reponse += DOUZE;
break;
case 3 :
reponse += TREIZE;
break;
case 4 :
reponse += QUATORZE;
break;
case 5 :
reponse += QUINZE;
break;
case 6 :
reponse += SEIZE;
break;
default :
reponse += DIX+" "+getChiffre(u);
}
break;
case 2 :
reponse += VINGT;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 3 :
reponse += TRENTE;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 4 :
reponse += QUARANTE;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 5 :
reponse += CINQUANTE;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 6 :
reponse += SOIXANTE;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 7 :
reponse += SOIXANTE+" ";
if(u==1)
reponse += " et";
switch(u)
{
case 0 :
reponse += DIX;
break;
case 1 :
reponse += ONZE;
break;
case 2 :
reponse += DOUZE;
break;
case 3 :
reponse += TREIZE;
break;
case 4 :
reponse += QUATORZE;
break;
case 5 :
reponse += QUINZE;
break;
case 6 :
reponse += SEIZE;
break;
default :
reponse += DIX+" "+getChiffre(u);
}
break;
case 8 :
reponse += QUATRE+" "+VINGT;
if(u>0)
reponse += " "+getChiffre(u);
break;
case 9 :
reponse += QUATRE+" "+VINGT+" ";
switch(u)
{
case 0 :
reponse += DIX;
break;
case 1 :
reponse += ONZE;
break;
case 2 :
reponse += DOUZE;
break;
case 3 :
reponse += TREIZE;
break;
case 4 :
reponse += QUATORZE;
break;
case 5 :
reponse += QUINZE;
break;
case 6 :
reponse += SEIZE;
break;
default :
reponse += DIX+" "+getChiffre(u);
}
break;
}
//On renvoie la réponse, à laquelle on retire les éventuels espaces surperflus
return reponse.trim();
}
/**
* Renvoie le nombre en lettre,
* ex: 1234567890 devient : un milliard deux cent trente quatre million cinq cent soixante sept mille huit cent quatre vingt dix
*/
public static String getLettre(long l)
{
//Cas zéro
if(l==0L)
return ZERO;
String signe="";
//Cas négatif
if(l<0L)
{
//On prned la valeur absolue
l=-l;
//On ajoutera moins devant
signe=MOINS+" ";
}
//Initilisation de la réponse
String reponse="";
//Rang du paquet actuel, on va parcourir le nombre de gauche à droite, le premier paquet de 123456 sera donc : 456
int rang=0;
while(l>0L)
{
//on ajoute le paquet devant la réponse
reponse=paquet((int)(l%1000L))+" "+tab[rang]+" "+reponse;
//on passe au paquet suivant
l=l/1000L;
rang++;
}
//on ajoute le signe éventuel
reponse=signe+reponse;
//On renvoie la réponse, à laquelle on retire les éventuels espaces surperflus
return reponse.trim();
}
public static void main(String args[])
{
String valx="";
String valy="";
int x=0;
long ax=Long.parseLong(valx);
long ay=Long.parseLong(valy);
if(x!=-1)
{
System.out.println(""+getLettre(ax)+" Dinars et "+getLettre(ay)+" Millimes");
}
else
{
System.out.println(""+getLettre(ax)+" Dinars ");
}
}
}
dje_jay
Messages postés58Date d'inscriptionmercredi 17 décembre 2003StatutMembreDernière intervention16 février 20112 28 sept. 2007 à 11:09
L'idée a le mérite d'être intéressante. Depuis que ça a été posté, il n'y a pas encore eu de correctif?(posté ailleur,etc...)
clinpus
Messages postés10Date d'inscriptiondimanche 11 septembre 2005StatutMembreDernière intervention19 mai 2008 17 sept. 2007 à 22:20
Pourkoi le mille fonctionne pas!!
1000: un mille
dohlevaleureux
Messages postés1Date d'inscriptionsamedi 25 juin 2005StatutMembreDernière intervention16 février 2007 16 févr. 2007 à 12:27
merci pour code il est formidable mais je desire le tester pour cela aide moi a le compilé a plus
user_two
Messages postés8Date d'inscriptionmercredi 8 septembre 2004StatutMembreDernière intervention26 décembre 2005 16 août 2006 à 17:01
ça ne marche pas pour 100000 ni pour 100000000 ni pour 1000000000.
Au revoir
hermes84
Messages postés18Date d'inscriptionvendredi 13 juin 2003StatutMembreDernière intervention19 août 2004 10 mai 2004 à 09:40
sourse 1téresantte ! !g èmé for bcp! merki!
cs_coucounet
Messages postés83Date d'inscriptionjeudi 24 juillet 2003StatutMembreDernière intervention16 février 2005 30 mars 2004 à 14:49
c vrai ça, le code est interressant pour le java, mais aussi pour les fautes d'orthographe.
Si y'en a qui veulent compliquer un peu le code je rappelle que :
20 : vingt
80 : quatre-vingts (avec le tiret et le S à 20)
81 : quatre vint un (sans le tiret sans le S)
100 : cent
200 : deux cents (avec le S à 100)
201 : deux cent un (sans le S)
Voilà bon courage
coucounet
cs_raff
Messages postés182Date d'inscriptiondimanche 18 août 2002StatutMembreDernière intervention 5 janvier 20043 19 févr. 2003 à 06:46
hum...sans trop chialer, quand même...bonjour les fautes d'ortographe !!!
Neozix
Messages postés33Date d'inscriptionmercredi 27 février 2002StatutMembreDernière intervention25 avril 2003 18 févr. 2003 à 20:46
Pas mal... Mais je me demande si toutes les public static final String ZERO="zéro"; n'aurait pas pu être simplifiées. Je dis ça comme ça. Mais ca m'intéresserait de savoir. Je vais essayer de trouver quelque chose... Sinon, source intéressante.
27 mai 2010 à 16:57
Je vous remercie pour les codes, à moi donc d'ajouter ma pierre à l'édifice et vous proposant une version qui (normalement) respecte les "-" et les "s" et permet aussi de tenir compte (si l'on veut) des recommandations de 1990 liées à l'écriture des nombres.
y a encore de l'optimisation à faire .... mais ça marche.
public class NombreEnLettre {
/**
* Représentaion en lettre de 0
*/
public static final String ZERO = "zéro";
/**
* Représentaion en lettre de 1
*/
public static final String UN = "un";
/**
* Représentaion en lettre de 2
*/
public static final String DEUX = "deux";
/**
* Représentaion en lettre de 3
*/
public static final String TROIS = "trois";
/**
* Représentaion en lettre de 4
*/
public static final String QUATRE = "quatre";
/**
* Représentaion en lettre de 5
*/
public static final String CINQ = "cinq";
/**
* Représentaion en lettre de 6
*/
public static final String SIX = "six";
/**
* Représentaion en lettre de 7
*/
public static final String SEPT = "sept";
/**
* Représentaion en lettre de 8
*/
public static final String HUIT = "huit";
/**
* Représentaion en lettre de 9
*/
public static final String NEUF = "neuf";
/**
* Représentaion en lettre de 10
*/
public static final String DIX = "dix";
/**
* Représentaion en lettre de 11
*/
public static final String ONZE = "onze";
/**
* Représentaion en lettre de 12
*/
public static final String DOUZE = "douze";
/**
* Représentaion en lettre de 13
*/
public static final String TREIZE = "treize";
/**
* Représentaion en lettre de 14
*/
public static final String QUATORZE = "quatorze";
/**
* Représentaion en lettre de 15
*/
public static final String QUINZE = "quinze";
/**
* Représentaion en lettre de 16
*/
public static final String SEIZE = "seize";
/**
* Représentaion en lettre de 20
*/
public static final String VINGT = "vingt";
/**
* Représentaion en lettre de 30
*/
public static final String TRENTE = "trente";
/**
* Représentaion en lettre de 40
*/
public static final String QUARANTE = "quarante";
/**
* Représentaion en lettre de 50
*/
public static final String CINQUANTE = "cinquante";
/**
* Représentaion en lettre de 60
*/
public static final String SOIXANTE = "soixante";
/**
* Représentaion en lettre de 100
*/
public static final String CENT = "cent";
/**
* Représentaion en lettre de 1000
*/
public static final String MILLE = "mille";
/**
* Représentaion en lettre de 1000000
*/
public static final String MILLION = "million";
/**
* Représentaion en lettre de 1000000000
*/
public static final String MILLIARD = "milliard";
/**
* Représentaion en lettre de -
*/
public static final String MOINS = "moins";
// Nom des différents types de paquet de nombre
private static final String[] tab = { "", MILLE, MILLION, MILLIARD, MILLE + " " + MILLIARD,
MILLION + " de " + MILLIARD, MILLIARD + " de " + MILLIARD };
/**
* Renvoie la représentation en lettre d'un chiffre, c'est à dire d'un
* nombre ente 0 et 9
*/
public static String getChiffre(int l) {
if ((l < 0) || (l > 9))
throw new IllegalArgumentException("Un chiffre est entre 0 et 9, donc " + l + " est interdit");
switch (l) {
case 0:
return ZERO;
case 1:
return UN;
case 2:
return DEUX;
case 3:
return TROIS;
case 4:
return QUATRE;
case 5:
return CINQ;
case 6:
return SIX;
case 7:
return SEPT;
case 8:
return HUIT;
case 9:
return NEUF;
}
return null;
}
// Retourne la représentation en lettre d'un paquet. Un paquet est formé de
// tois chiffres, comme 123, 012, 001, 100, 101,...
private static String paquet(int p) {
// On initialise la réponse
String reponse = "";
if (p == 100) {
reponse = CENT;
return reponse.trim();
}
// Si on a un chiffre des centaines
if (p > 100) {
// Si la valeur est >199 alors, on va mettre devant le chiffre des
// centaine
if (p / 100 > 1)
reponse = getChiffre(p / 100) + " ";
// C'est une centaine, donc on ajoute ensuite "cent"
reponse += CENT;
if ((p / 100 > 1) && (p % 100 == 0))
reponse += "s ";
else
reponse += " ";
// On récupére ce qui n'est pas la centaine
p = p % 100;
}
// c chiffre des dizaines
// u chiffre des unitées
int c = p / 10;
int u = p % 10;
switch (c) {
// Si la dizaine est nulle, alors le nombre est un chiffre
case 0:
if (u != 0)
reponse += getChiffre(u);
break;
case 1:
switch (u) {
case 0:
reponse += DIX;
break;
case 1:
reponse += ONZE;
break;
case 2:
reponse += DOUZE;
break;
case 3:
reponse += TREIZE;
break;
case 4:
reponse += QUATORZE;
break;
case 5:
reponse += QUINZE;
break;
case 6:
reponse += SEIZE;
break;
default:
reponse += DIX + "-" + getChiffre(u);
}
break;
case 2:
reponse += VINGT;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
if (u == 0)
reponse += "s";
break;
case 3:
reponse += TRENTE;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
break;
case 4:
reponse += QUARANTE;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
break;
case 5:
reponse += CINQUANTE;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
break;
case 6:
reponse += SOIXANTE;
if (u == 1)
reponse += " et";
if (u == 1)
reponse += " " + getChiffre(u);
if (u > 1)
reponse += "-" + getChiffre(u);
break;
case 7:
reponse += SOIXANTE;
if (u == 1)
reponse += " et";
switch (u) {
case 0:
reponse += "-" + DIX;
break;
case 1:
reponse += " " + ONZE;
break;
case 2:
reponse += "-" + DOUZE;
break;
case 3:
reponse += "-" + TREIZE;
break;
case 4:
reponse += "-" + QUATORZE;
break;
case 5:
reponse += "-" + QUINZE;
break;
case 6:
reponse += "-" + SEIZE;
break;
default:
reponse += "-" + DIX + "-" + getChiffre(u);
}
break;
case 8:
reponse += QUATRE + "-" + VINGT;
if (u > 0)
reponse += "-" + getChiffre(u);
if (u == 0)
reponse += "s";
break;
case 9:
reponse += QUATRE + "-" + VINGT + "-";
switch (u) {
case 0:
reponse += DIX;
break;
case 1:
reponse += ONZE;
break;
case 2:
reponse += DOUZE;
break;
case 3:
reponse += TREIZE;
break;
case 4:
reponse += QUATORZE;
break;
case 5:
reponse += QUINZE;
break;
case 6:
reponse += SEIZE;
break;
default:
reponse += DIX + "-" + getChiffre(u);
}
break;
}
// On renvoie la réponse, à laquelle on retire les éventuels espaces
// surperflus
return reponse.trim();
}
public static String convert(String w){
int p1 = w.indexOf(".");
int p2 = w.indexOf(",");
if (p1!=-1){
String partieEntiere = w.substring(0,p1);
String partieVirgule = w.substring(p1+1);
w = NombreEnLettre.getLettre(partieEntiere)+" virgule "+NombreEnLettre.getLettre(partieVirgule);
}
if (p2!=-1){
String partieEntiere = w.substring(0,p2);
String partieVirgule = w.substring(p2+1);
w = NombreEnLettre.getLettre(partieEntiere)+" virgule "+NombreEnLettre.getLettre(partieVirgule);
}
if ( (p1 == -1) && (p2==-1)){
// nombre entier
return NombreEnLettre.getLettre(w);
}
return w;
}
public static String getLettre(String w) {
w = w.trim();
String rep = w;
try {
long number = Long.parseLong(w);
rep = NombreEnLettre.getLettre(number);
} catch (NumberFormatException nfe) {
System.out.println("Conversion impossible.... n'est pas un nombre");
}
return rep;
}
private static String checkForMilliard(String w) {
try{
int p = w.indexOf("milliards");
if (p != -1) {
w = w.substring(0, p - 1) + " " + w.substring(p, p + 9) + " " + w.substring(p + 10);
return w;
}
p = w.indexOf("milliard");
if (p != -1) {
w = w.substring(0, p - 1) + " " + w.substring(p, p + 8) + " " + w.substring(p + 9);
return w;
}
}catch (Exception e){
w = w.replaceAll("-", " ");
}
return w;
}
private static String checkForMillion(String w) {
try{
int p = w.indexOf("millions");
if (p != -1) {
w = w.substring(0, p - 1) + " " + w.substring(p, p + 8) + " " + w.substring(p + 9);
return w;
}
p = w.indexOf("million");
if (p != -1) {
w = w.substring(0, p - 1) + " " + w.substring(p, p + 7) + " " + w.substring(p + 8);
return w;
}
}catch (Exception e){
w = w.replaceAll("-", " ");
}
return w;
}
public static String checkForVirgule(String w){
int p = w.indexOf("-virgule-");
if (p!=-1){
String s[] = w.split("-virgule-");
w = s[0]+" virgule "+s[1];
}
return w;
}
public static String convertToRecommandation1990(String w) {
w = w.replaceAll(" ", "-");
w = NombreEnLettre.checkForMilliard(w);
w = NombreEnLettre.checkForMillion(w);
w = NombreEnLettre.checkForVirgule(w);
return w;
}
/**
* Renvoie le nombre en lettre,
* ex: 1234567890 devient : un milliard deux cent trente quatre million cinq
* cent soixante sept mille huit cent quatre vingt dix
*/
public static String getLettre(long l) {
// Cas zéro
if (l == 0L)
return ZERO;
String signe = "";
// Cas négatif
if (l < 0L) {
// On prned la valeur absolue
l = -l;
// On ajoutera moins devant
signe = MOINS + " ";
}
// Initilisation de la réponse
String reponse = "";
// Rang du paquet actuel, on va parcourir le nombre de gauche à droite,
// le premier paquet de 123456 sera donc : 456
int rang = 0;
while (l > 0L) {
String pluriel = "";
if (tab[rang].equals("million") || tab[rang].equals("milliard")) {
if ((l % 1000L) > 1)
pluriel = "s";
}
// on ajoute le paquet devant la réponse
if ((l % 1000L)!=0)
reponse = paquet((int) (l % 1000L)) + " " + tab[rang] + pluriel + " " + reponse;
if (tab[rang].equals("mille") && (l % 1000L == 1)) {
reponse = reponse.substring(3);// on enleve "un "
}
// on passe au paquet suivant
l = l / 1000L;
rang++;
}
reponse = signe + reponse;
return reponse.trim();
}
}
8 janv. 2010 à 13:39
Ta source est vraiment intéressante , mais je viens de trouver une erreur , ça sera géniale de la corriger.
C'est en fait pour les centaines :
Par exemple : 55100 donne cinquante cinq mille (ce qui faux)
et pire : 100 ne retourne aucun résultat !!!
1 déc. 2009 à 02:38
comment faire pr telechargez le zip
merci
17 avril 2009 à 00:55
27 janv. 2009 à 12:22
J'ai essayer d'exécuter ce programme dans Netbeans et il m'a indiquer deux erreurs que je ne comprend pas
La Première: au niveau de la déclaration du Package "Utilitaires"
La Deuxième: au niveau de la déclaration de la classe "Nombre"(il me dit que nombre est une claase public donc je dois
mettre le .Java devant et quand je le fais, il me montre tjrs qu'il y une erreur. svp aimez moi. A plus et Merci...
9 févr. 2008 à 20:03
20 janv. 2008 à 22:50
public class Nombre
{
/**
* Représentaion en lettre de 0
*/
public static final String ZERO="zéro";
/**
* Représentaion en lettre de 1
*/
public static final String UN="un";
/**
* Représentaion en lettre de 2
*/
public static final String DEUX="deux";
/**
* Représentaion en lettre de 3
*/
public static final String TROIS="trois";
/**
* Représentaion en lettre de 4
*/
public static final String QUATRE="quatre";
/**
* Représentaion en lettre de 5
*/
public static final String CINQ="cinq";
/**
* Représentaion en lettre de 6
*/
public static final String SIX="six";
/**
* Représentaion en lettre de 7
*/
public static final String SEPT="sept";
/**
* Représentaion en lettre de 8
*/
public static final String HUIT="huit";
/**
* Représentaion en lettre de 9
*/
public static final String NEUF="neuf";
/**
* Représentaion en lettre de 10
*/
public static final String DIX="dix";
/**
* Représentaion en lettre de 11
*/
public static final String ONZE="onze";
/**
* Représentaion en lettre de 12
*/
public static final String DOUZE="douze";
/**
* Représentaion en lettre de 13
*/
public static final String TREIZE="treize";
/**
* Représentaion en lettre de 14
*/
public static final String QUATORZE="quatorze";
/**
* Représentaion en lettre de 15
*/
public static final String QUINZE="quinze";
/**
* Représentaion en lettre de 16
*/
public static final String SEIZE="seize";
/**
* Représentaion en lettre de 20
*/
public static final String VINGT="vingt";
/**
* Représentaion en lettre de 30
*/
public static final String TRENTE="trente";
/**
* Représentaion en lettre de 40
*/
public static final String QUARANTE="quarante";
/**
* Représentaion en lettre de 50
*/
public static final String CINQUANTE="cinquante";
/**
* Représentaion en lettre de 60
*/
public static final String SOIXANTE="soixante";
/**
* Représentaion en lettre de 100
*/
public static final String CENT="cent";
/**
* Représentaion en lettre de 1000
*/
public static final String MILLE="mille";
/**
* Représentaion en lettre de 1000000
*/
public static final String MILLION="million";
/**
* Représentaion en lettre de 1000000000
*/
public static final String MILLIARD="milliard";
/**
* Représentaion en lettre de -
*/
public static final String MOINS="moins";
//Nom des différents types de paquet de nombre
private static final String[] tab={"",MILLE,MILLION,MILLIARD,MILLE+" "+MILLIARD,
MILLION+" de "+MILLIARD,MILLIARD+" de "+MILLIARD};
/**
* Renvoie la représentation en lettre d'un chiffre, c'est à dire d'un nombre ente 0 et 9
*/
public static String getChiffre(int l)
{
if((l<0)||(l>9))
throw new IllegalArgumentException("Un chiffre est entre 0 et 9, donc "+l+" est interdit");
switch(l)
{
case 0 :
return ZERO;
case 1 :
return UN;
case 2 :
return DEUX;
case 3 :
return TROIS;
case 4 :
return QUATRE;
case 5 :
return CINQ;
case 6 :
return SIX;
case 7 :
return SEPT;
case 8 :
return HUIT;
case 9 :
return NEUF;
}
return null;
}
//Retourne la représentation en lettre d'un paquet. Un paquet est formé de tois chiffres, comme 123, 012, 001, 100, 101,...
private static String paquet(int p)
{
//On initialise la réponse
String reponse="";
//Si on a un chiffre des centaines
if(p>100)
{
//Si la valeur est >199 alors, on va mettre devant le chiffre des centaine
if(p/100>1)
reponse=getChiffre(p/100)+" ";
//C'est une centaine, donc on ajoute ensuite "cent"
reponse += CENT+" ";
//On récupére ce qui n'est pas la centaine
p=p%100;
}
//c chiffre des dizaines
//u chaiffre des unitées
int c=p/10;
int u=p%10;
switch(c)
{
//Si la dizaine est nule, alors le nombre est un chiffre
case 0 :
if(u!=0)
reponse += getChiffre(u);
break;
case 1 :
switch(u)
{
case 0 :
reponse += DIX;
break;
case 1 :
reponse += ONZE;
break;
case 2 :
reponse += DOUZE;
break;
case 3 :
reponse += TREIZE;
break;
case 4 :
reponse += QUATORZE;
break;
case 5 :
reponse += QUINZE;
break;
case 6 :
reponse += SEIZE;
break;
default :
reponse += DIX+" "+getChiffre(u);
}
break;
case 2 :
reponse += VINGT;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 3 :
reponse += TRENTE;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 4 :
reponse += QUARANTE;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 5 :
reponse += CINQUANTE;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 6 :
reponse += SOIXANTE;
if(u==1)
reponse += " et";
if(u>0)
reponse += " "+getChiffre(u);
break;
case 7 :
reponse += SOIXANTE+" ";
if(u==1)
reponse += " et";
switch(u)
{
case 0 :
reponse += DIX;
break;
case 1 :
reponse += ONZE;
break;
case 2 :
reponse += DOUZE;
break;
case 3 :
reponse += TREIZE;
break;
case 4 :
reponse += QUATORZE;
break;
case 5 :
reponse += QUINZE;
break;
case 6 :
reponse += SEIZE;
break;
default :
reponse += DIX+" "+getChiffre(u);
}
break;
case 8 :
reponse += QUATRE+" "+VINGT;
if(u>0)
reponse += " "+getChiffre(u);
break;
case 9 :
reponse += QUATRE+" "+VINGT+" ";
switch(u)
{
case 0 :
reponse += DIX;
break;
case 1 :
reponse += ONZE;
break;
case 2 :
reponse += DOUZE;
break;
case 3 :
reponse += TREIZE;
break;
case 4 :
reponse += QUATORZE;
break;
case 5 :
reponse += QUINZE;
break;
case 6 :
reponse += SEIZE;
break;
default :
reponse += DIX+" "+getChiffre(u);
}
break;
}
//On renvoie la réponse, à laquelle on retire les éventuels espaces surperflus
return reponse.trim();
}
/**
* Renvoie le nombre en lettre,
* ex: 1234567890 devient : un milliard deux cent trente quatre million cinq cent soixante sept mille huit cent quatre vingt dix
*/
public static String getLettre(long l)
{
//Cas zéro
if(l==0L)
return ZERO;
String signe="";
//Cas négatif
if(l<0L)
{
//On prned la valeur absolue
l=-l;
//On ajoutera moins devant
signe=MOINS+" ";
}
//Initilisation de la réponse
String reponse="";
//Rang du paquet actuel, on va parcourir le nombre de gauche à droite, le premier paquet de 123456 sera donc : 456
int rang=0;
while(l>0L)
{
//on ajoute le paquet devant la réponse
reponse=paquet((int)(l%1000L))+" "+tab[rang]+" "+reponse;
//on passe au paquet suivant
l=l/1000L;
rang++;
}
//on ajoute le signe éventuel
reponse=signe+reponse;
//On renvoie la réponse, à laquelle on retire les éventuels espaces surperflus
return reponse.trim();
}
public static void main(String args[])
{
String valx="";
String valy="";
int x=0;
String nbr="12.693";
x=nbr.indexOf(".");
valx=nbr.substring(0,x);
valy=nbr.substring(x+1,nbr.length());
System.out.println("==="+valx);
System.out.println("==="+valy);
long ax=Long.parseLong(valx);
long ay=Long.parseLong(valy);
if(x!=-1)
{
System.out.println(""+getLettre(ax)+" Dinars et "+getLettre(ay)+" Millimes");
}
else
{
System.out.println(""+getLettre(ax)+" Dinars ");
}
}
}
28 sept. 2007 à 11:09
17 sept. 2007 à 22:20
1000: un mille
16 févr. 2007 à 12:27
16 août 2006 à 17:01
Au revoir
10 mai 2004 à 09:40
30 mars 2004 à 14:49
Si y'en a qui veulent compliquer un peu le code je rappelle que :
20 : vingt
80 : quatre-vingts (avec le tiret et le S à 20)
81 : quatre vint un (sans le tiret sans le S)
100 : cent
200 : deux cents (avec le S à 100)
201 : deux cent un (sans le S)
Voilà bon courage
coucounet
19 févr. 2003 à 06:46
18 févr. 2003 à 20:46