Convertions Nombre en lettre et vice et versa [Résolu]

Donpi 12 Messages postés vendredi 10 octobre 2008Date d'inscription 9 février 2010 Dernière intervention - 10 oct. 2008 à 09:58 - Dernière réponse : Donpi 12 Messages postés vendredi 10 octobre 2008Date d'inscription 9 février 2010 Dernière intervention
- 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+
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 10 oct. 2008 à 12:17
3
Merci
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

Merci billou_13 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de billou_13
Meilleure réponse
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 10 oct. 2008 à 18:32
3
Merci
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-

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de cs_Bidou
Donpi 12 Messages postés vendredi 10 octobre 2008Date d'inscription 9 février 2010 Dernière intervention - 10 oct. 2008 à 14:06
0
Merci
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;
            }
        }
Commenter la réponse de Donpi
Donpi 12 Messages postés vendredi 10 octobre 2008Date d'inscription 9 février 2010 Dernière intervention - 10 oct. 2008 à 14:06
0
Merci
C'est le code qui marche bien au cas ou ;)

A+
Commenter la réponse de Donpi
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 10 oct. 2008 à 14:46
0
Merci
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
Commenter la réponse de billou_13
Donpi 12 Messages postés vendredi 10 octobre 2008Date d'inscription 9 février 2010 Dernière intervention - 10 oct. 2008 à 15:31
0
Merci
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
Commenter la réponse de Donpi
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 10 oct. 2008 à 16:10
0
Merci
Ok, merci beaucoup pour l'info !

Bonne fin de journée,


Billou_13
Commenter la réponse de billou_13
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 13 oct. 2008 à 23:54
0
Merci
Alors, tu as essayé ce bout de code?
L'est plus rapide?

<hr />
-My Blog-
Commenter la réponse de cs_Bidou
Donpi 12 Messages postés vendredi 10 octobre 2008Date d'inscription 9 février 2010 Dernière intervention - 14 oct. 2008 à 12:23
0
Merci
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 :)
Commenter la réponse de Donpi
Donpi 12 Messages postés vendredi 10 octobre 2008Date d'inscription 9 février 2010 Dernière intervention - 14 oct. 2008 à 12:24
0
Merci
Mais a première vue c'est surement plus rapide :)
Commenter la réponse de Donpi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.