2010-10-10 9 views
2

j'ai un objet personne ayant une propriété d'âge (int)ce qui est la meilleure façon de convertir « 6,00000000000000 » à une propriété entière

je suis l'analyse d'un fichier et cette valeur est à venir dans ce format « 6,00000000000000 »

ce qui est la meilleure façon de convertir cette chaîne en un int en C#

Convert.ToInt32() or Int.Parse() gives me an exception: 

chaîne d'entrée était pas dans un format correct.

+0

avez-vous même recherché pour cela? C'est un doublon de http://stackoverflow.com/questions/2344411/how-to-convert-string-to-integer-in-c – msarchet

+0

duplicata possible de [Comment puis-je convertir String en Int?] (Http: // stackoverflow.com/questions/1019793/how-can-i-convert-string-to-int) – ChrisF

+1

@ChrisF: Je ne considère pas cela comme une copie exacte. La question que vous avez liée concernait la conversion d'une chaîne entière en un 'int'. Cette question concerne la conversion d'une chaîne décimale qui représente une valeur entière en un entier. La différence est petite mais pertinente: c'est pourquoi les réponses ici incluent l'analyse 'double' et' decimal', et l'option 'NumberStyles.AllowDecimalPoint'. – Joren

Répondre

11

Cela dépend de votre confiance dans le fait que les données d'entrée respectent toujours ce format. Voici quelques alternatives:

string text = "6.00000000" 

// rounding will occur if there are digits after the decimal point 
int age = (int) decimal.Parse(text); 

// will throw an OverflowException if there are digits after the decimal point 
int age = int.Parse(text, NumberStyles.AllowDecimalPoint); 

// can deal with an incorrect format 
int age; 
if(int.TryParse(text, NumberStyles.AllowDecimalPoint, null, out age)) 
{    
    // success 
} 
else 
{ 
    // failure 
} 

EDIT: Changement double-decimal après commentaire.

+1

Je préfère utiliser 'decimal' que' double' pour le premier cas. Les nombres entiers devraient convenir, mais en général, l'analyse de l'entrée décimale en virgule flottante binaire n'est pas une bonne idée. Quoi qu'il en soit, votre deuxième option est de loin la plus sensible, +1. Si vous ne voulez pas gérer les exceptions, utilisez simplement TryParse au lieu de Parse. – Joren

+0

@Joren: +1. Bon point sur 'decimal'. – Ani

1
int age = (int) double.Parse(str); 
int age = (int) decimal.Parse(str);