Bonsoir à vous,
J'ai un champs (Salary__c) en décimal que je souhaite le convertir en lettres, par exemple : 15 140 => quinze milles et cent quarante.
Avez vous une piste s'il vous plait!
Merci
Bonsoir à vous,
J'ai un champs (Salary__c) en décimal que je souhaite le convertir en lettres, par exemple : 15 140 => quinze milles et cent quarante.
Avez vous une piste s'il vous plait!
Merci
Bonjour,
A première vue, ton besoin semble relativement complexe à réaliser. Je suis curieux de connaitre l'utilité de ce besoin...
Pour ma part, je te conseillerais plutôt d'ajouter un champ texte permettant à l'utilisateur de remplir lui même le montant sous format texte.
cdt,
c'est pour convertir le champs salaire, puisque j'en ai besoin dans la demande de certificat d'emploi.. j'ai trouvé cette classe qui fait la conversion mais en anglais, la voilà:
Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 public with sharing class NumberToWord { static String[] to_19 = new string[]{ 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen' }; static String[] tens = new string[]{ 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'}; static String[] denom = new string[]{ '', 'thousand', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion', 's!xtillion', 'septillion', 'octillion', 'nonillion', 'decillion', 'undecillion', 'duodecillion', 'tredecillion', 'quattuordecillion', 's!xdecillion', 'septendecillion', 'octodecillion', 'novemdecillion', 'vigintillion' }; // convert a value < 100 to English. public static String convert_nn(integer val) { if (val < 20) return to_19[val]; if(val == 100) return 'One Hundred'; for (integer v = 0; v < tens.size(); v++) { String dcap = tens[v]; integer dval = 20 + 10 * v; if (dval + 10 > val) { if (Math.Mod(val,10) != 0) return dcap + ' ' + to_19[Math.Mod(val,10)]; return dcap; } } return 'Should never get here, less than 100 failure'; } // convert a value < 1000 to english, special cased because it is the level that kicks // off the < 100 special case. The rest are more general. This also allows you to // get strings in the form of "forty-five hundred" if called directly. public static String convert_nnn(integer val) { String word = ''; integer rem = val / 100; integer mod = Math.mod(val,100); if (rem > 0) { word = to_19[rem] + ' hundred'; if (mod > 0) { word += ' '; } } if (mod > 0) { word += convert_nn(mod); } return word; } public static String english_number(long val) { if (val < 100) { return convert_nn(val.intValue()); } if (val < 1000) { return convert_nnn(val.intValue()); } for (integer v = 0; v < denom.size(); v++) { integer didx = v - 1; integer dval = (integer)Math.pow(1000, v); if (dval > val) { integer mod = (integer)Math.pow(1000, didx); integer l = (integer) val / mod; integer r = (integer) val - (l * mod); String ret = convert_nnn(l) + ' ' + denom[didx]; if (r > 0) { ret += ', ' + english_number(r); } return ret; } } return 'Should never get here, bottomed out in english_number'; } }
Question tres interessante et tres utile indeed.
Le code java semple plutot bon,tu devrais pouvoir traduire ca en apex, relativement facilement.
Je pense qu il existe un managed package gratuit dans Appexchange qui fait ca mais en anglais bien sure.
Pour ceux qui comme moi ont cherché en français
la réponse en anglais
http://salesforcewithkiran.blogspot....s-in-apex.html
que j'ai un peu corriger
quelques tests
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 public with sharing class AG_NumberToWord { static String[] to_19 = new string[]{ 'zero', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf' }; static String[] tens = new string[]{ 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante-dix', 'quatre-vingt', 'quatre-vingt-dix'}; static String[] denom = new string[]{ '', 'mille', 'million', 'billion', 'trillion', 'quadrillion', 'quintillion', 's!xtillion', 'septillion', 'octillion', 'nonillion', 'decillion', 'undecillion', 'duodecillion', 'tredecillion', 'quattuordecillion', 'sixdecillion', 'septendecillion', 'octodecillion', 'novemdecillion', 'vigintillion' }; // convert a value < 100 to English. public static String convert_nn(integer val) { if (val < 20) return to_19[val]; if(val == 100) return 'cent'; for (integer v = 0; v < tens.size(); v++) { String dcap = tens[v]; integer dval = 20 + 10 * v; if (dval + 10 > val) { if (Math.Mod(val,10) != 0) return dcap + ' ' + to_19[Math.Mod(val,10)]; return dcap; } } return 'Should never get here, less than 100 failure'; } // convert a value < 1000 to english, special cased because it is the level that kicks // off the < 100 special case. The rest are more general. This also allows you to // get strings in the form of "forty-five hundred" if called directly. public static String convert_nnn(integer val) { String word = ''; integer rem = val / 100; integer mod = Math.mod(val,100); if (rem > 0) { if (rem > 1) word = to_19[rem] + ' cent'; else word = 'cent'; if (mod > 0) { word += ' '; } else word += 's'; } if (mod > 0) { word += convert_nn(mod); } return word; } // convert a value < 10000 public static String convert_nnnn(integer val) { String word = ''; integer rem = val / 1000; integer mod = Math.mod(val,1000); if (rem > 0) { if (rem > 1) word = to_19[rem] + ' mille'; else word = 'mille'; if (mod > 0) { word += ' '; } } if (mod > 0) { word += convert_nnn(mod); } return word; } public static String french_number(long val) { if (val < 100) { return convert_nn(val.intValue()); } if (val < 1000) { return convert_nnn(val.intValue()); } if (val < 10000) { return convert_nnnn(val.intValue()); } for (integer v = 0; v < denom.size(); v++) { integer didx = v - 1; integer dval = (integer)Math.pow(1000, v); if (dval > val) { integer mod = (integer)Math.pow(1000, didx); integer l = (integer) val / mod; integer r = (integer) val - (l * mod); String ret = convert_nnn(l) + ' ' + denom[didx]; if (r > 0) { ret += ' ' + french_number(r); } return ret; } } return 'Should never get here, bottomed out in english_number'; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 /* // AG_NumberToWord_TEST ---------------------------------------------------------------------- -- - Name : AG_NumberToWord_TEST -- - Author : Avenir Green -- - Description : Classe de test pour AG_NumberToWord -- -- Maintenance History: -- -- Date Name Version Remarks -- ----------- ---- ------- --------------------------------------- -- 22-APR-2015 VCH 1.0 Intitial version ---------------------------------------------------------------------- ********************************************************************** */ @isTest private class AG_NumberToWord_TEST { static testMethod void numberTest() { // some test < 19 System.assertEquals('un', AG_NumberToWord.french_number(1)); System.assertEquals('cinq', AG_NumberToWord.french_number(5)); // some test < 100 System.assertEquals('quarante', AG_NumberToWord.french_number(40)); System.assertEquals('trente six', AG_NumberToWord.french_number(36)); // some test < 1000 System.assertEquals('cent vingt sept', AG_NumberToWord.french_number(127)); System.assertEquals('huit cent quatre-vingt-dix', AG_NumberToWord.french_number(890)); System.assertEquals('quatre cents', AG_NumberToWord.french_number(400)); // some test < 10000 System.assertEquals('mille neuf cent quarante deux', AG_NumberToWord.french_number(1942)); System.assertEquals('six mille huit', AG_NumberToWord.french_number(6008)); System.assertEquals('seize mille cent vingt huit', AG_NumberToWord.french_number(16128)); } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager