{ Conversion de tout nombre entier positif compris entre 0 et 999 999 999 999 999 999 en lettres (Le nombre est systématiquement arrondi) SMO - GIBBON Informatique - 1999 } var uniteARST ARRAY[19] String dizaineARST ARRAY[9] String endvar proc centaine_ST(const moins_de_mille_SI SmallInt) string var CentaineST, UniteST String UniteSI SmallInt endVar If moins_de_mille_SI < 0 Or moins_de_mille_SI >= 1000 Then msgStop("Erreur de Saisie", "Valeur non comprise entre 1 et 1000 !") Return "" EndIf If moins_de_mille_SI = 0 Then Return "" EndIf CentaineST.blank() UniteST.blank() UniteSI = smallInt(moins_de_mille_SI.mod(100)) If UniteSI = 0 Then ; Centaines If moins_de_mille_SI = 100 Then Return "cent" EndIf Return uniteARST[moins_de_mille_SI / 100] + " cents" EndIf IF moins_de_mille_SI >= 100 THEN IF moins_de_mille_SI / 100 = 1 THEN ; >= 100 & < 200 CentaineST = "cent" ELSE CentaineST = uniteARST[moins_de_mille_SI / 100] + " cent" ENDIF ENDIF SWITCH case UniteSI = 0 : ;UniteST = "zéro" case UniteSI < 20 : UniteST = uniteARST[UniteSI] case UniteSI = 71 : UniteST = dizaineARST[6] + " et " + uniteARST[11] case UniteSI > 71 and UniteSI < 80 : UniteST = dizaineARST[6] + "-" + uniteARST[UniteSI - 60] case UniteSI > 80 : UniteST = dizaineARST[8] + "-" + uniteARST[UniteSI - 80] case UniteSI = 80 : UniteST = dizaineARST[1] otherwise : UniteST = dizaineARST[UniteSI / 10] + iif(UniteSI.mod(10) = 0,"", IIF(UniteSI.mod(10) = 1," et un", "-" + uniteARST[UniteSI.mod(10)])) endswitch Return IIF(CentaineST.isBlank(), UniteST, CentaineST + " " + UniteST) endproc ; ============================================= method nb_en_lettres_ST(nNU Number) String Var MtST, CentaineST String Moins_de_1000_SI, Puissance_de_1000_SI SmallInt EndVar nNU = floor(nNU) If nNU = 0 Then Return "zéro" EndIf uniteARST[1] = "un" uniteARST[2] = "deux" uniteARST[3] = "trois" uniteARST[4] = "quatre" uniteARST[5] = "cinq" uniteARST[6] = "six" uniteARST[7] = "sept" uniteARST[8] = "huit" uniteARST[9] = "neuf" uniteARST[10] = "dix" uniteARST[11] = "onze" uniteARST[12] = "douze" uniteARST[13] = "treize" uniteARST[14] = "quatorze" uniteARST[15] = "quinze" uniteARST[16] = "seize" uniteARST[17] = "dix-sept" uniteARST[18] = "dix-huit" uniteARST[19] = "dix-neuf" dizaineARST[1] = "quatre-vingts" dizaineARST[2] = "vingt" dizaineARST[3] = "trente" dizaineARST[4] = "quarante" dizaineARST[5] = "cinquante" dizaineARST[6] = "soixante" dizaineARST[7] = "soixante-dix" dizaineARST[8] = "quatre-vingt" dizaineARST[9] = "quatre-vingt-dix " MtST.blank() Puissance_de_1000_SI = 0 While nNU > 0 Moins_de_1000_SI = smallInt(nNU.mod(1000)) If Moins_de_1000_SI > 0 Then CentaineST = centaine_ST(Moins_de_1000_SI) Switch Case Puissance_de_1000_SI = 0 : ; < 1 000 MtST = CentaineST Case Puissance_de_1000_SI = 1 : ; mille MtST = IIF(Moins_de_1000_SI = 1, "", CentaineST + " ") + "mille" + IIF(MtST.isBlank(), "", " " + MtST) Case Puissance_de_1000_SI = 2 : ; million(s) MtST = CentaineST + " million" + IIF(Moins_de_1000_SI = 1, "", "s") + IIF(MtST.isBlank(), "", " " + MtST) Case Puissance_de_1000_SI = 3 : ; milliard(s) MtST = CentaineST + " milliard" + IIF(Moins_de_1000_SI = 1, "", "s") + IIF(MtST.isBlank(), "", " " + MtST) Case Puissance_de_1000_SI = 4 : ; mille milliard(s) MtST = IIF(Moins_de_1000_SI = 1, "", CentaineST + " ") + "mille" + IIF(MtST.search("milliard") = 0, " milliards", "") + IIF(MtST.isBlank(), "", " " + MtST) Case Puissance_de_1000_SI = 5 : ; million(s) de milliard(s) MtST = CentaineST + " million" + IIF(Moins_de_1000_SI = 1, "", "s") + IIF(MtST.search("milliard") = 0, " de milliards", "") + IIF(MtST.isBlank(), "", " " + MtST) Otherwise : ; Il ne faut pas exagérer !!! msgInfo("Aaarrrggghhh !!!", "Nombre trop grand !!!") Return "" EndSwitch EndIf nNU = nNU - Moins_de_1000_SI nNU = nNU / 1000 Puissance_de_1000_SI = Puissance_de_1000_SI + 1 EndWhile Return MtST endMethod