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

Salesforce.com Discussion :

Convertit un nombre decimal à des lettres


Sujet :

Salesforce.com

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Convertit un nombre decimal à des lettres
    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

  2. #2
    Membre régulier Avatar de Actarus78
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 87
    Points : 118
    Points
    118
    Par défaut
    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,

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    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';  
        }  
      }

  4. #4
    Membre régulier
    Homme Profil pro
    Salesforce Developer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Salesforce Developer

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 99
    Points
    99
    Par défaut
    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.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 239
    Points : 424
    Points
    424
    Par défaut
    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

    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';  
        }  
      }
    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
    /*
    // 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));
    
        
      }
    }

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/12/2014, 20h45
  2. tri sur champ alphanumérique avec des nombres ou des lettres
    Par Satanas_et_diabolo dans le forum Débuter
    Réponses: 2
    Dernier message: 27/04/2012, 12h28
  3. [JavaScript] [SRC] afficher des nombres en toutes lettres
    Par javatwister dans le forum Contribuez
    Réponses: 2
    Dernier message: 07/09/2007, 13h23
  4. Tri varchar contenant des nombres et des lettres
    Par ben106 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/08/2007, 21h58

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