Exception lors de l'analyse négative double numéros en C#
Je suis de codage de la paix de code permettant d'extraire des données à partir d'une base. Et le problème est que je veux convertir un nombre négatif chaîne "-2.8" pour un double. Assez facile, j'ai pensé. J'ai essayé d'abord avec:
var climateString = "−2.8";
var number = double.Parse(climateString);
Avec ce résultat:
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
Alors j'ai pensé encore une fois, cherché sur google, et a obtenu de nouveaux réponse:
var climateString = "−2.8";
var styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |NumberStyles.Float | NumberStyles.AllowDecimalPoint;
var rit = double.Parse(climateString, styles);
Epic fail de nouveau:
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
J'ai pensé encore une fois, je ne peux pas être aussi stupide que de ne pas savoir comment faire une telle tâche simple. J'ai essayé ceci:
var climateString = "−2.8";
var doue = Convert.ToDouble(climateString, CultureInfo.InvariantCulture);
Oui, exactement de la même exception de nouveau. J'ai commencé à regarder un le nombre, et, j'ai réalisé le signe négatif. Look de ce numéro avec précaution "-2.8" ce n'est pas un nombre négatif. C'est un nombre négatif "-2.8". Regardez ces signes de nouveau "----- -----" pas le même. Analyse une chaîne avec un autre signe déclenche une exception : S. Donc, si quelqu'un a une idée, comment l'analyser élégamment à un nombre double en C#? Thak vous!
Ou peut-être nettoyer la source de données dans la base de données en premier. Garbage in, Garbage out.
OriginalL'auteur etragu | 2014-03-25
Vous devez vous connecter pour publier un commentaire.
Bonne façon de le faire:
Ne sais pas désinvolte. Je pense pas, cependant.
OriginalL'auteur Søren Debois
Remplacer par un trait d'union pour le tableau de bord:
(Vous voudrez peut-être à l'affût pour d'autres personnages étranges provenant de la base de données, cependant).
Vous avez raison! J'ai ajouté une deuxième réponse à la bonne façon de le faire.
OriginalL'auteur Søren Debois
Peut-être un vieux post, mais pour quelqu'un d'autre la lecture de ce...
Vous avez NumberStyles.AllowTrailingSign, qui devrait probablement être NumberStyles.AllowLeadingSign sinon il ne sera pas accepter un signe - de toute façon.
OriginalL'auteur Daniel Andersson
Vous avez un personnage qui n'est pas le caractère moins utilisées dans les nombres (vous avez trait d'union, pas de tiret). Il faut le remplacer, il n'y a pas d'autres "élégant". Ces deux caractères seulement visuellement ressemblent les uns les autres, mais ils ne sont pas destinés à remplacer les uns des autres, sans changement de sens.
OriginalL'auteur Szymon
Je suggère d'utiliser TryParse au lieu de la méthode d'analyse, car il doucement la poignée vous d'erreur le cas échéant.
Code -
var test1 = "-123.95";
decimal result;
decimal.TryParse(test1, out result);
vous aurez analysé double de la valeur dans résultat.
OriginalL'auteur arpitbakshi