C# Conversion d'une chaîne de caractères contenant une virgule flottante pour un entier
Quelle est la meilleure façon de faire passer une chaîne de caractères qui peut être vide ou contenir "1.2" par exemple, et de les convertir en un nombre entier? int.TryParse
échoue, bien sûr, et je ne veux pas utiliser float.TryParse
et ensuite de les convertir à int
.
btw, 1.2 n'est pas un entier.
Appart analyse à un flotteur et puis rouding, je ne vois pas comment vous pourriez le faire...
et VB6 ne ce
yup, j'ai remarqué.. c'est pourquoi je viens de upvoted Philippe.. analyser et de fonte semble être le moyen de le faire en C#. Les réponses ci-dessous tous semblent être beaucoup plus de travail dans la comparaison.
Appart analyse à un flotteur et puis rouding, je ne vois pas comment vous pourriez le faire...
(int)float.Parse("1.2")
- il n'est pas trop de travail. Ruby n'bien - "1.234".to_i
rendements 1et VB6 ne ce
Int("1.234")
rendements 1. Mais la question est sur C#.yup, j'ai remarqué.. c'est pourquoi je viens de upvoted Philippe.. analyser et de fonte semble être le moyen de le faire en C#. Les réponses ci-dessous tous semblent être beaucoup plus de travail dans la comparaison.
OriginalL'auteur Nir | 2010-08-03
Vous devez vous connecter pour publier un commentaire.
Solution 1:
Convert.ToDouble
(culture-dépendante)Vous pouvez à l'aide de
Convert.ToDouble
. Mais, méfiez-vous! Ci-dessous la solution ne fonctionne que lorsque le nombre de séparateur dans la culture actuelle du paramètre est un caractère de période.Solution 2:
Convert.ToDouble
(culture-indépendante)Il est préférable d'utiliser
IFormatProvider
et de convertir le nombre de façon indépendante à partir des paramètres de culture actuels:Solution 3: Analyser & Split
Une autre façon d'accomplir cette tâche est l'utilisation de Split sur la chaîne à analyser:
Ou:
Notes
IsNullOrEmpty
condition.NumberFormatInfo.NumberDecimalSeparator
propriété.Parse
,TryParse
ouConversion
classe à bon escient. Lire plus:Convert.ToDouble
utilise le séparateur de décimales à partir du thread paramètres de culture (par défaut, les paramètres régionaux de Windows), et il peut être une virgule. Vous pouvez le forcer à utiliser un point en passantCultureInfo.InvariantCulture.NumberFormat
OriginalL'auteur Dariusz Woźniak
Je ne sais pas quel est le problème avec l'analyse d'un
float
et de conversion d'uneint
. Je doute que n'importe quel autre moyen serait plus efficace, mais en voici une tentative:Afin de globaliser le code, vous devez remplacer
"."
avecSystem.De la mondialisation.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
.J'ai ajouté une note au sujet de la mondialisation. Merci!
Sans doute le meilleur, @Mark. +1 de ma part.
OriginalL'auteur Mark Cidade
Peut-être que vous pouvez essayer de supprimer tout ce qui est après virgule flottante à l'aide de fonctions de chaîne et ensuite de les convertir en int. Mais sérieusement je ne pense pas que c'est mieux que la conversion de flotter, puis à l'int.
,
Bien sûr, je pensais que c'était évident 🙂 En Russie, nous utilisons des virgules.
OriginalL'auteur fuwaneko
Vous avez besoin pour le tour, sauf si vous voulez 0.9 f converti à 0 au lieu de 1.
OriginalL'auteur Struan
Je pense qu'un autre moyen de le faire serait de fractionnement de la chaîne en morceaux en prenant le décimal (.) en tant que séparateur, puis l'analyse de l'entier. Bien sûr, je suis encore à vous demander si la chaîne peut contenir des valeurs comme
"37.56 miles in 32.65 seconds"
type de valeurs.Vu qu'il n'y aura qu'une seule valeur (chaîne ou un nombre) dans la chaîne, je peux penser à quelque chose dans la ligne suivante:
OriginalL'auteur Kangkan
Vous pouvez utiliser le Visual Basic Bibliothèque d'exécution pour accomplir ce à partir de c#.
Vous devez ajouter une référence à l'assembly Microsoft.VisualBasic.dll pour votre solution.
Ensuite le code suivant sera de faire votre conversion:
OriginalL'auteur David
J'ai eu ce même problème et a fini à l'aide d'un hybride de la Marque, et Dariusz':
OriginalL'auteur Ja Austin