La conversion de chaîne à double en C#
J'ai une longue chaîne avec double-type des valeurs séparées par des #
-value1#value2#value3#
etc
Je l'ai coupée à la table des chaînes. Alors, je veux convertir chaque élément de ce tableau de type double et j'obtiens une erreur. Quel est le problème avec conversion de type ici?
string a = "52.8725945#18.69872650000002#50.9028073#14.971600200000012#51.260062#15.5859949000000662452.23862099999999#19.372202799999250800000045#51.7808372#19.474096499999973#";
string[] someArray = a.Split(new char[] { '#' });
for (int i = 0; i < someArray.Length; i++)
{
Console.WriteLine(someArray[i]); //correct value
Convert.ToDouble(someArray[i]); //error
}
- Quelle est l'erreur? Il fonctionne très bien pour moi...
- essayez de boucle à travers chacun d'eux, vous verrez que l'indice 5 est une mauvaise chaîne à convertir en double.
- Bien sûr, mais l'index 0 semble être la bonne.
- L'un de vos valeurs d'entrée a deux décimales.
- Regarder les octets de la chaîne
tablicaLatLng[0]
, qui devrait vous montrer ce qui est mal. - Si les chaînes ne respectent pas les formats et les limites décrites sur le site web MSDN alors qu'ils ne seront pas convertibles, je suggère la lecture de MSDN. msdn.microsoft.com/en-us/library/zh1hkw6k.aspx. Quelles sont les exceptions obtenez-vous, qui sera le fil conducteur.
- J'ai compilé ton code et je n'ai pas de problèmes de construction. Quelle erreur avez-vous? Est-ce que tout le code?
- Je vote pour fermer trop localisée. Cela semble être un problème pas de pouvoir fournir une réponse appropriée pour le moment et c'est tout simplement frustrant gens.
- vérifier ma réponse, il devrait résoudre ce problème
- Si c'est une consolation, il semble que si vous vous êtes trompé (nous étions). La question était en fait quelqu'un qui essaie d'analyser les valeurs d'une culture dans une autre. L'OP est question a eu quelques fausses pistes, mais nous avons tous deux fait des hypothèses sur ce que le problème a été (à cause de certaines mauvaises info sur l'OP est en partie) qui nous mènent sur le mauvais chemin.
- Peut-être que ce ne doit pas être fermée. Il n'est pas "seulement une petite zone géographique". C'est toujours un bug d'utiliser les paramètres régionaux dépendant de la fonction pour une locale indépendante problème, c'est un très commun de bug. Et c'est un bug dans le Kansas, comme à Munich. Seulement dans le Kansas, il est plus difficile à trouver. (BTW: j'ai trouvé cette question car j'ai eu exactement ce bug dans mon code, dois-je compter comme un futur visiteur?)
Vous devez vous connecter pour publier un commentaire.
Il y a 3 problèmes.
1) Incorrect séparateur décimal
Différentes cultures, différents séparateurs décimaux (à savoir
,
et.
).Si vous remplacez
.
avec,
il devrait fonctionner comme prévu:Vous pouvez analyser votre double à l'aide de méthode surchargée qui prend de la culture en tant que second paramètre. Dans ce cas, vous pouvez utiliser
InvariantCulture
( Qu'est-ce que l'invariant de la culture ), par exemple à l'aide dedouble.Parse
:Vous devriez aussi jeter un oeil à
double.TryParse
, vous pouvez l'utiliser avec de nombreuses options et il est particulièrement utile de vérifier si votre chaîne est validedouble
.2) Vous avez une mauvaise double
L'un de vos valeurs n'est pas parce qu'il contient deux points:
15.5859949000000662452.23862099999999
3) Votre tableau a une valeur vide à la fin, ce qui est un mauvais double
Vous pouvez utiliser surchargé
Split
qui supprime les valeurs vides:string[] someArray = a.Split(new char[] { '#' }, StringSplitOptions.RemoveEmptyEntries);
.
et il m'a donnéStringFormatException
, quand je l'ai changé pour,
il a travaillé (culture: pl_PL). C'est aussi la réponse de sa question (concernant la première double)..
avec,
fonctionne très bien mais je dois prendre l'une des valeurs avec.
, pas avec,
(pour l'api de google - lat et de gnl nécessite '.').System.Globalization.CultureInfo.InvariantCulture
? Un grand merci pour l'aide, salutations!Ajouter une classe Publique et de l'utiliser très facilement comme convertToInt32()
Puis Appeler La Fonction
La plupart des gens déjà essayé de répondre à vos questions.
Si vous êtes encore de débogage, avez-vous pensé à utiliser:
Cela vous aidera à déterminer ce qui est mauvais dans chaque de la chaîne d'abord avant de vous faire l'analyse.
Si vous avez une culture liée problème, vous pouvez envisager d'utiliser:
Ce http://msdn.microsoft.com/en-us/library/system.double.tryparse.aspx a un très bon exemple sur la façon de les utiliser.
Si vous avez besoin d'un long, Int64.TryParse est également disponible: http://msdn.microsoft.com/en-us/library/system.int64.tryparse.aspx
Espère que ça aide.
et a passé avec succès les tests sont les suivants:
Dans votre chaîne je vois:
15.5859949000000662452.23862099999999
qui n'est pas un double (il a deux décimales). Peut-être que c'est juste une légitime erreur de saisie?Vous pouvez également déterminer si votre dernière
String
sera vide, et de tenir compte de cette situation.Vous pouvez essayer cet exemple. Un simple C# progaram pour convertir la chaîne de caractères à double