Pourquoi double.TryParse(“0.0000”, sur doubleValue) renvoie la valeur faux ?
Je suis en train d'analyser la chaîne "0.0000" avec double.TryParse()
mais je n'ai aucune idée de pourquoi en serait-il de retour faux dans cet exemple particulier. Quand je passe la entier-comme des cordes par exemple, "5", il traite correctement la valeur de 5 .
Des idées pourquoi il se passe ?
- il prendra les paramètres de localisation au moment de l'exécution en compte... peut-être que vous sont en cours d'exécution sur un système où
.
n'est pas le point décimal mais,
à la place ? - Oui, cela pourrait être le cas, mais comment le résoudre ?
- Vous suggère de faire une réponse (et inclure surcharge qui prend un
IFormatProvider
de sorte que la culture peut être spécifié). - Peut-être que vous avez choisi la mauvaise culture.
TryParse
utilise la culture actuelle par défaut. (Un idiot décision de l'OMI, mais il est maintenant trop tard pour le changer)
Vous devez vous connecter pour publier un commentaire.
il prend les paramètres de localisation au moment de l'exécution en compte... peut-être que vous exécutez sur un système où
.
n'est pas le point décimal mais,
à la place...Dans votre cas particulier, je suppose que vous voulez un fixe de la culture quel que soit le système que vous êtes en cours d'exécution sur avec
.
que le point décimal:OU
Certains MSDN liens de référence:
TryParse
utilise la culture actuelle par défaut. Et si votre culture actuelle utilise un séparateur décimal différent de.
, il ne peut pas analyser0.0000
comme vous le souhaitez. Donc, vous devez passer dansCultureInfo.InvariantCulture
.Presque certainement le problème est que
Thread.CurrentCulture
ne pas utiliser le point comme séparateur décimal.Si vous savez que le nombre sera toujours mis en forme avec le point comme séparateur décimal, utilisez ce code qui utilise l'autre surcharge de
double.TryParse
:Il sera de retour
false
si la culture actuelle indique une virgule séparateur qui est différente de la.
caractère.Lors de l'analyse des chaînes de la représentation, vous devez être conscient de ce que la culture qu'ils sont représentés autrement vous aurez un comportement inattendu.
Dans ce cas, vous obtenez
false
, mais ça pourrait être pire encore, par exemple dans l'exemple suivant, si vous vous attendiez à obtenir le numéro un de vous au lieu d'obtenir un mille:C'est parce que dans le
pt-PT
de la culture de la.
caractère est utilisé commeNumberGroupSeparator
et la,
caractère est utilisé commeNumberDecimalSeparator
.Si l'entrée vous êtes l'analyse provient de l'utilisateur, il faut l'analyser en utilisant la culture de l'utilisateur est associé. L'obtention de la culture de l'utilisateur est associé est quelque chose dépend du contexte, par exemple dans une application Windows Forms, vous utilisez
Thread.CurrentThread.CurrentCulture
quand sur le thread d'INTERFACE utilisateur pour l'obtenir. Dans un ASP.NET application ce qui peut être différent.À changer la culture de quelque chose qui a "." comme séparateur décimal utilisation:
À partir de la page MSDN pour cette méthode.
http://msdn.microsoft.com/en-us/library/994c0zb1.aspx
Zéro va en, zéro sort.
La modification de la CultureInfo avec TryParse n'a rien fait pour moi. J'ai dû changer le nombre de formats de sous Panneau de Contrôle (le Changement, la date, l'heure, ou des formats de nombre) et changé le symbole Décimal. Que cela a fonctionné à nouveau.
La chose la plus stupide à ce sujet est qu'il ne l'accepter "," comme séparateur décimal dans ma culture, mais le résultat est avec un ".". Quelqu'un, quelque part, n'était pas très chanceux de la pensée de ce jour...
Je vais donc essayer ceci:
Ça fonctionne pour moi:
écrit
True
.