Convertions Nombre en lettre et vice et versa

Résolu
Donpi
Messages postés
12
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
9 février 2010
- 10 oct. 2008 à 09:58
Donpi
Messages postés
12
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
9 février 2010
- 14 oct. 2008 à 12:24
Hello, je suis développeur C# depuis peu de temps et la je bloque sur un problème tout bête mais je suis super pris par le temps donc je m'adresse a vous pour savoir si qqun a déjà developper un truc du genre

Le but est simple, c'est de pouvoir convertir un nombre en successions de lettre du type des colonnes d'excel.
Par exemple :

1=A
2=B
26 = Z
27 = AA
52 = AZ

Etc...

Lettre vers nombre c'est OK mais en partant du nombre j'ai un problème a chaque fois que le résultat doit contenir un "Z"

Merci de votre aide a+

10 réponses

cs_Bidou
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
59
10 oct. 2008 à 18:32
Beaucoup plus rapide:

public
static
string ChiffreLettre(
int chiffre)
{
  
StringBuilder sb =
new
StringBuilder();
  
try
   {
     
for (
int i = chiffre - 1; i > 0; i--)
     {
        
int remainder = 0;
        
int result =
Math.DivRem(i, 26,
out remainder);
         sb.Insert(0, (
char)(remainder + 65));
         i = result;
     }
    
return sb.ToString();
   }
  
catch (
Exception ex) {
throw ex; }
}

<hr />
-My Blog-
3
billou_13
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
29
10 oct. 2008 à 12:17
Bonjour,

Si je ne me trompes, il s'agit s'implement de convertir un nombre décimal en base 26.
Cependant, comme A=1 et que l'on a pas la correspondance du 0, il faut tout d'abord soustraire 1 de ton chiffre avant de faire la conversion en base 26.

Voici des liens pour les conversions:
- http://www.csharpfr.com/codes/CONVERTISSEUR-DECIMAL-BINAIRE-HEXADECIMAL_39983.aspx
- http://www.csharpfr.com/codes/CONVERTISSEUR-NOMBRES-HEXADECIMAUX_35003.aspx

Bon courage,


Billou_13
1
Donpi
Messages postés
12
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
9 février 2010

10 oct. 2008 à 14:06
Mais oui quel idiot, le secret c'est le -1... encore merci


        static string ChiffreLettre(int iParam)
        {
            string sTemp = "";
            int iTemp = iParam;
            try
            {
                while (iTemp > 0 )
                {
                    iTemp -= 1;
                    if (iTemp>25)
                    {
                        sTemp = Convert.ToChar((int)(iTemp % 26) + 65) + sTemp;
                        iTemp = (int)(iTemp / 26);
                    }
                    else
                    {
                        sTemp = Convert.ToChar(iTemp + 65)+sTemp;
                        iTemp = 0;
                    }
                }
                return sTemp;
            }
            catch (Exception oE)
            {
                throw oE;
            }
        }
0
Donpi
Messages postés
12
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
9 février 2010

10 oct. 2008 à 14:06
C'est le code qui marche bien au cas ou ;)

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
billou_13
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
29
10 oct. 2008 à 14:46
J'avoue que j'avais failli le manquer aussi ^^

Cependant, y'a un truc que tu pourras peut-être m'expliquer car j'ai pas eu l'occaz de faire le code (ou de tester le tien):

Si on décale de 1, on dit alors que A correspond à 0 => alors AA (= 00) n'existe pas !!!! (ca devrait être BA après Z)

Comment évites-tu ce problème ???


Billou_13
0
Donpi
Messages postés
12
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
9 février 2010

10 oct. 2008 à 15:31
nop AA = 27

La difficulté pour moi est sur le Z et non sur le A

Si tu soustrais 1 tu à 26

26/26 = 1 Reste 0
Le reste donne la lettre en cour donc le caractère de droite est un "A" (puis ce qu'on traitre des nombres on vas de droite a gauche)
Ensuite on garde la partie entière de la division pour calculer le caractère suivant (celui de gauche)
Ce qui donnce 1

à l'ieration suivant, on recommence lors qu'on soustrait 1 on a 0
et c'est justement pour la dernière iteration que j'ai mis un if le nombre a traiter est plus petit que 25 de ne pas faire la division...

C'est plus claire avec des grand nombre plus grand que 262
0
billou_13
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
29
10 oct. 2008 à 16:10
Ok, merci beaucoup pour l'info !

Bonne fin de journée,


Billou_13
0
cs_Bidou
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
59
13 oct. 2008 à 23:54
Alors, tu as essayé ce bout de code?
L'est plus rapide?

<hr />
-My Blog-
0
Donpi
Messages postés
12
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
9 février 2010

14 oct. 2008 à 12:23
salut, non, j'ai pas essayer, t'es juste arriver un peu comme la cavalerie ;)
mon applique est fini, mais je garde le liens au cas ou :)
0
Donpi
Messages postés
12
Date d'inscription
vendredi 10 octobre 2008
Statut
Membre
Dernière intervention
9 février 2010

14 oct. 2008 à 12:24
Mais a première vue c'est surement plus rapide :)
0