Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Console] Variable

Sujet résolu
Anonyme
    3 mars 2012 à 14:47:32

    Bonjour à tous. ;)
    Je suis actuellement en train de lire les premiers chapitres sur le C#, et je ne comprends pas une erreur que Visual C# m'indique.

    Dans le code suivant :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace MaPremiereApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                int age = 30; // 
    
                Console.WriteLine("Hello World !!"); 
                Console.WriteLine(age); 
                
            }
        }
    }
    


    Visual Studio m'affiche l'erreur suivante : "Un littéral de type double ne peut pas être converti implicitement en type 'decimal' ; utilisez un suffixe 'M' pour créer un littéral de ce type."

    Pouvez-vous m'aider ?
    Merci d'avance ! :)

    P.S : je suis conscient que c'est du niveau ultra-débutant, mais il fait bien commencer par là. ^^

    Edit : en relançant mon logiciel (Visual C#), l'erreur ne s'affiche plus. Si vous pouvez quand même me renseigner sur cette erreur, ça m'aiderait beaucoup.
    • Partager sur Facebook
    • Partager sur Twitter
      3 mars 2012 à 15:48:06

      Le code que tu as posté ne peut pas avoir donné cette erreur. Par contre le code suivant aurait effectivement ce problème :

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      
      namespace MaPremiereApplication
      {
          class Program
          {
              static void Main(string[] args)
              {
                  decimal age = 30.5;
      
                  Console.WriteLine("Hello World !!"); 
                  Console.WriteLine(age); 
                  
              }
          }
      }
      


      Dans ce cas-ci, le compilateur renverra l'erreur que tu as indiquée. Elle vient du fait qu'en C# il y a plusieurs façons de représenter un nombre décimal ("à virgules"), et les différences se situent au niveau de la précision que tu peux obtenir. Les types double et decimal correspondent à deux de ces représentations possibles (le type decimal étant plus précis, mais moins courant).

      Ici j'ai déclaré une variable "age" de type décimal, et je l'initialise avec la valeur 30.5 (dite littérale car écrite en toutes lettres). Or par défaut pour le compilateur "30.5" représente un double, et il n'y a pas de conversion automatique entre un double et un decimal et donc l'assignation de cette valeur à une variable de type decimal n'est pas possible. Le compilateur t'invite donc à écrire plutôt la valeur littérale équivalente à "30.5" pour un decimal, qui est "30.5M" (et ne me demande pas pourquoi le suffixe nécessaire est 'M', je n'en ai aucune idée :-° ). Une autre manière de faire serait de convertir explicitement la valeur double en décimal, comme ceci :
      decimal age = (decimal)30.5;
      

      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        3 mars 2012 à 16:07:20

        Ah d'accord, je comprend mieux. Effectivement, j'avais écrit :

        decimal age = 99.5;
        


        Je l'avais effacé mais l'erreur est rester. Pas bien grave.
        Je comprend ton explication mais il y a toujours un point que je ne comprends pas.

        J'en suis comme tu peux voir au chapitre "les variables"

        Un moment, on me dit d'écrire le code suivant pour pouvoir faire une décimal : decimal soldeCompteBancaire = 100;

        Erreur du tutoriel ou cela vient de moi ? :-°
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          3 mars 2012 à 16:33:34

          Il me semble que la raison pour laquelle le type decimal a pour suffixe M est bêtement le fait que c'est le type utilisé pour l'argent ("money"). ^^
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            3 mars 2012 à 16:40:49

            Donc en faite la variable decimal est adapté aux calculs financiers tandis que double est adapté aux nombres décimaux ?
            • Partager sur Facebook
            • Partager sur Twitter
              3 mars 2012 à 16:55:24

              Citation : xRom31

              Un moment, on me dit d'écrire le code suivant pour pouvoir faire une décimal : decimal soldeCompteBancaire = 100;

              Erreur du tutoriel ou cela vient de moi ? :-°


              "100" est considéré par le compilateur comme un int ("100.0" serait considéré comme un double). Et la conversion int -> decimal est automatique, contrairement à la conversion double -> decimal qui ne l'est pas. Donc le compilateur convertit la valeur entière 100 en decimal sans broncher.

              Donc on peut écrire
              decimal age = 99;
              

              mais pas
              decimal age = 99.0;
              

              Oui, c'est subtil. :-°

              Citation : xRom31

              Donc en faite la variable decimal est adapté aux calculs financiers tandis que double est adapté aux nombres décimaux ?


              On peut voir ça comme ça, oui ;)
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                3 mars 2012 à 17:09:53

                Ok, merci de vos réponses qui m'ont bien aidés ! ;)
                • Partager sur Facebook
                • Partager sur Twitter

                [Console] Variable

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown