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

Langage PHP Discussion :

convertir montant en lettres


Sujet :

Langage PHP

  1. #1
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut convertir montant en lettres
    Bonjour à tous

    voici mon code pour convertir un montant en lettre
    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
     
    function int2str($a)
    {
    $convert = explode('.',$a);
    if (isset($convert[1]) && $convert[1]!=''){
    return int2str($convert[0]).'Dinars'.' et '.int2str($convert[1]).'Centimes' ;
    }
    if ($a<0) return 'moins '.int2str(-$a);
    if ($a<17){
    switch ($a){
    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';
    case 10: return 'dix';
    case 11: return 'onze';
    case 12: return 'douze';
    case 13: return 'treize';
    case 14: return 'quatorze';
    case 15: return 'quinze';
    case 16: return 'seize';
    }
    } else if ($a<20){
    return 'dix-'.int2str($a-10);
    } else if ($a<100){
    if ($a%10==0){
    switch ($a){
    case 20: return 'vingt';
    case 30: return 'trente';
    case 40: return 'quarante';
    case 50: return 'cinquante';
    case 60: return 'soixante';
    case 70: return 'soixante-dix';
    case 80: return 'quatre-vingt';
    case 90: return 'quatre-vingt-dix';
    }
    } elseif (substr($a, -1)==1){
    if( ((int)($a/10)*10)<70 ){
    return int2str((int)($a/10)*10).'-et-un';
    } elseif ($a==71) {
    return 'soixante-et-onze';
    } elseif ($a==81) {
    return 'quatre-vingt-un';
    } elseif ($a==91) {
    return 'quatre-vingt-onze';
    }
    } elseif ($a<70){
    return int2str($a-$a%10).'-'.int2str($a%10);
    } elseif ($a<80){
    return int2str(60).'-'.int2str($a%20);
    } else{
    return int2str(80).'-'.int2str($a%20);
    }
    } else if ($a==100){
    return 'cent';
    } else if ($a<200){
    return int2str(100).' '.int2str($a%100);
    } else if ($a<1000){
    return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
    } else if ($a==1000){
    return 'mille';
    } else if ($a<2000){
    return int2str(1000).' '.int2str($a%1000).' ';
    } else if ($a<1000000){
    return int2str((int)($a/1000)).' '.int2str(1000).' '.int2str($a%1000);
    }
    else if ($a==1000000){
    return 'millions';
    }
    else if ($a<2000000){
    return int2str(1000000).' '.int2str($a%1000000).' ';
    }
    else if ($a<1000000000){
    return int2str((int)($a/1000000)).' '.int2str(1000000).' '.int2str($a%1000000);
    }
    }
    mon problème est: quand j'ai un montant par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int2str(1522530 );
    le résultat affiché est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    millions cinq cent vingt-deux mille cinq cent trente
    et si j'ai le montant 5522530 il m'affiche bien cinq millions cinq cent vingt-deux mille cinq cent trente


    don si j'ai un million il m'"crit directement million sans le 'un'

    merci à vous

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ton problème vient de ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    else if ($a == 1000000) {
    	return 'millions';
    }
    else if ($a < 2000000) {
    	return int2str(1000000) . ' ' . int2str($a % 1000000) . ' ';
    }
    else if ($a < 1000000000) {
    	return int2str((int)($a / 1000000)) . ' ' . int2str(1000000) . ' ' . int2str($a % 1000000);
    }
    Quand tu as un million (1 000 000), tu écris "millions" directement.
    Personnellement, j'écrirais ça à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    else if ($a < 2000000) {
    	return 'un million ' . int2str($a % 1000000) . ' ';
    }  
    else if ($a < 1000000000) {
    	return int2str((int)($a / 1000000)) . ' millions ' . int2str($a % 1000000);
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'extension INTL le fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $fmt = new NumberFormatter('fr', NumberFormatter::SPELLOUT);
    echo $fmt->format(1522530);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    voici ma fonction pour convertir un nombre en toutes lettres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $formatter = \NumberFormatter::create('fr_FR', \NumberFormatter::SPELLOUT);
    $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, 0);
    $formatter->setAttribute(\NumberFormatter::ROUNDING_MODE, \NumberFormatter::ROUND_HALFUP);
     
    echo $formatter->format(1522530);   // un million cinq cent vingt-deux mille cinq cent trente
    PHP le fait nativement grâce à la super bibliothèque ICU, alors, à mois que tu bosses sur les algo, ne t'en prive pas.

  5. #5
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    voici l'erreur que j'ai eu:
    Class 'NumberFormatter' not found

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    quelle version de PHP utilises-tu ?

  7. #7
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    PHP Version 5.5.28

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ok, vérifie dans ton php.ini que la ligne
    extension=php_intl.dll
    est bien décommentée.
    Sinon décommente, redémarre le serveur web et réessaie.

    Quand tu fais un phpinfo();, tu dois voir un bloc intitulé intl

  9. #9
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    j'ai fait ce que vous m'avez demandé
    et toujours ce problème:
    Fatal error: Class 'NumberFormatter' not found

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Vérifie dans le php.ini que tu modifies le bon php.ini
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    voici un but de code de mon php.ini

    extension=php_bz2.dll
    extension=php_curl.dll
    extension=php_mbstring.dll
    extension=php_exif.dll
    ;extension=php_fileinfo.dll
    extension=php_gd2.dll
    extension=php_gettext.dll
    ;extension=php_gmp.dll
    extension=php_intl.dll
    ;extension=php_imap.dll
    ;extension=php_interbase.dll
    ;extension=php_ldap.dll
    ;extension=php_mssql.dll
    ;extension=php_mbstring.dll

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    utilises tu wamp comme environnement d'exécution ?

    si oui, tu dois modifier le php.ini dans la branche apache active et non celui dans la branche php (va savoir )
    ensuite tu ne dois surtout pas oublier de redémarrer le serveur web.

    Enfin, fais un phpinfo(); pour savoir ce qui est réellement exécuté.

  13. #13
    Débutant  
    Inscrit en
    Mars 2008
    Messages
    1 123
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 1 123
    Points : 170
    Points
    170
    Par défaut
    merci beaucoup
    un million et un merci
    il fallait que je redémarre mon serveur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Convertir montant en toutes lettres
    Par Wise_Sherkaan dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 20/07/2015, 08h21
  2. Convertir montant en lettre
    Par minooo dans le forum Reports
    Réponses: 8
    Dernier message: 06/09/2012, 16h04
  3. Convertir Montant en lettres
    Par AnorkGD dans le forum Débuter
    Réponses: 2
    Dernier message: 11/04/2012, 12h57
  4. Convertir un montant en lettres
    Par ERWPER dans le forum iReport
    Réponses: 1
    Dernier message: 22/01/2009, 09h54
  5. Convertir un montant en lettre dans un état Crystal reports
    Par gopal dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 10/05/2006, 13h33

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