2010-09-21 6 views
0
dr["po_amt"].ToString() = 1,936.10; 

lorsque je tente de convertir en int32 en utilisant le code ci-dessous,C# conversion de type

Convert.ToInt32(dr["po_amt"].ToString()); 

il lance une chaîne d'entrée d'erreur n'a pas été au bon format. Comment puis-je y parvenir?

+1

Eh bien, ce n'est pas une valeur entière, de sorte que vous ne pouvez pas le convertir en un entier. Que voulez-vous faire avec la valeur? –

+1

Quel est le type de la valeur de dr ["po_amt"]? Convertir la valeur en chaîne juste pour l'analyser revient mal à son type, si c'est le cas. – dtb

Répondre

0

Convertir à double et le jeter aux int

int i = (int)Convert.ToDouble("1203.12"); 

œuvres :-)

9

Vous essayez de convertir "1,936.10" en nombre entier. C'est clairement pas un nombre entier. Vous devez l'analyser comme un nombre à virgule flottante (par exemple avec decimal.TryParse) et ensuite appliquer la conversion que vous souhaitez obtenir un nombre entier par la suite, si en effet vous voulez voulez un nombre entier.

(je fortement vous conseille d'utiliser decimal.TryParse sur float.TryParse ou double.TryParse, par la manière. Il est évident que la chaîne représente un nombre en décimal, de sorte que c'est le type le plus approprié d'utiliser.)

Lors de la conversion à decimal, vous devez spécifier la culture invariante (dans le cas où vous êtes dans une région qui utilise "." Pour le séparateur des milliers et "," comme séparateur décimal), et il ne serait pas difficile de spécifier explicitement le nombre style, permettant des milliers.

3

Vous ne pouvez pas convertir 1,936.10 en entier, mais vous pouvez le convertir en virgule flottante, puis le jeter:

(Int32) Convert.ToDouble("1,936.10", CultureInfo.InvariantCulture) 

Notez l'utilisation du CultureInfo pour éviter des problèmes lors de l'exécution dans un lieu où le point flottant format numérique est différent. La diffusion du nombre à virgule flottante tronquera la partie décimale. Si vous avez besoin de l'arrondir, vous devez appliquer le Math.Round() avant de le lancer.

+0

Je pense que c'est la meilleure solution de ce cas –

+0

Sauf que Skeet a raison sur 'decimal'. –

0

Essayez l'analyse syntaxique à un flotteur convertissant ensuite Int32:

var d = float.Parse("1936,10"); 
Convert.ToInt32(d);