Problème dans la Conversion de Décimal À la Chaîne dans C#.Net
Lors de la Conversion de Décimal à la Chaîne, j'ai essayé les deux méthodes.
Méthode 1:
string a = "100.00", b = "50.00";
string Total = (string)(Convert.ToDecimal(a) + Convert.ToDecimal(b));
Il déclenche une erreur, ne peut pas convertir un nombre Décimal en Chaîne.
Méthode 2:
string Total = (Convert.ToDecimal(a) + Convert.ToDecimal(b)).ToString();
Il ne jette pas d'erreur et il fonctionne très bien.
Je veux savoir la différence entre ces deux méthodes de Conversion et Pourquoi il déclenche une erreur lorsque j'ai utilisé la Méthode 1?
OriginalL'auteur thevan | 2011-06-16
Vous devez vous connecter pour publier un commentaire.
La première méthode est d'essayer de prendre une virgule (le résultat de l'ajout des 2 décimales), et de le jeter comme une chaîne de caractères. Depuis il n'y a pas (ou implicite) explicite la conversion de décimal à la corde, il jette en raison de l'incompatibilité.
Le second prend une virgule et appelle une méthode ToString () - depuis ToString est une méthode valable sur le type décimal, ce qui rend une instance normale appel de la méthode et vous obtenez la valeur de retour de cet appel, qui est une chaîne de caractères.
Puisque vous êtes à l'aide de Convertir les appels déjà, vous pourriez trouver qu'il est plus naturel de le faire Convertir.ToString pour obtenir le décimal en une chaîne de caractères.
Il serait plus clair si vous vous séparez les deux decimales dans un autre local var, depuis qui est commune à tous les deux ici.
Donc, l' (commenté) total1 échoue parce que c'est en essayant de les jeter, et nous n'avons pas de conversion disponible pour le faire. Les deux dernières fois, beau travail, car ils sont les appels de méthode qui retourne une chaîne.
OriginalL'auteur James Manning
Le premier code tente de type "cast" une virgule à la chaîne, où, comme le deuxième que l'on appelle la méthode ToString sur décimal pour obtenir la représentation de chaîne de chiffres après la virgule. Type coulée de décimales de chaîne ne fonctionne pas, à moins que de type décimal surcharges de l'opérateur de conversion de type, qu'il n'a pas, et donc le type coulée throws exception.
Type de casting dans ce cas, c'est comme demander le CLR système de type cast une virgule à la chaîne, qui CLR est pas en mesure de le faire parce qu'il ne trouve pas un moyen de le faire.
Appeler ToString est de demander le type décimal à l'retourne une chaîne contenant la représentation
OriginalL'auteur Ankur
Method1 est un plâtre , de sorte que vous êtes à essayer de "lire" les données contenues dans une variable décimale comme une chaîne de caractères...bien sûr, vous ne pouvez pas. Vous pouvez lancer, par exemple, un octet pour un int, car ils sont tous deux des nombres. Au lieu de virgule à la chaîne que vous avez besoin d'une conversion explicite de la procédure.
OriginalL'auteur N4rk0
sa parce que dans la première méthode, vous converti en chaîne de caractères a et b en décimal, mais alors que vous êtes juste à la conversion de type de chaîne, vous avez besoin de convertir une valeur décimale en string avant de l'affecter à une variable de chaîne.
dans la deuxième méthode, vous êtes en fait de convertir une valeur décimale en chaîne à l'aide de
ToString()
méthode, donc sa ne donnant pas d'erreur.OriginalL'auteur love Computer science
Voici le lien de la table qui dit que vous ne pouvez pas convertir un nombre décimal en chaîne comme vous l'avez fait dans la première méthode :
Explicite Conversions Numériques, Table (Référence C#)
Deuxième méthode est de travailler parce que vous êtes à l'aide de la méthode ToString() de la classe object.
Manning -- merci pour l'info monsieur....
OriginalL'auteur Pranay Rana
Dans la première méthode, vous êtes essentiellement faire
où 150 est décimal. Il n'y a aucune condition explicite ou implicite de la fonte de décimal à la chaîne. Le compilateur va pas comprendre comment les convertir.
Dans la deuxième méthode que vous appelez
Dans ce cas, vous appelez
ToString
méthode quiDecimal
classe implémente (ainsi que toutes les autres classes).OriginalL'auteur Alex Aza