我正在编写一个代码,它可以从数据库中提取一些数据。问题是我想将负数字符串“-2.8”转换为double。我想,很简单。我先尝试过:
var climateString = "−2.8";
var number = double.Parse(climateString);
结果如下:
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
所以我再想一想,在谷歌搜索,得到了新答案:
var climateString = "−2.8";
var styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |NumberStyles.Float | NumberStyles.AllowDecimalPoint;
var rit = double.Parse(climateString, styles);
史诗再次失败:
An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
我再想一想,我不能这么愚蠢,不知道如何做这么简单的任务。我试过这个:
var climateString = "−2.8";
var doue = Convert.ToDouble(climateString, CultureInfo.InvariantCulture);
是的,再次完全相同的例外。我开始查看数字,并且我在负号上意识到了。仔细看这个数字“-2.8”这不是负数。这是负数“-2.8”。再看看那些标志“----- -----”不一样。解析具有不同符号字符的字符串会抛出异常:S。所以,任何人都有一个想法,如何优雅地将其解析为C#中的双数?亲爱的!
答案 0 :(得分:18)
正确的方法:
var climateString = "−2.8";
var fmt = new NumberFormatInfo();
fmt.NegativeSign = "−";
var number = double.Parse(climateString, fmt);
答案 1 :(得分:7)
用破折号代替连字符:
var climateString = "−2.8".Replace ("−", "-");
var number = double.Parse(climateString);
(你可能希望留意那个来自该数据库的其他奇怪角色。)
答案 2 :(得分:2)
可能是一个老帖子,但对于其他读这个的人来说......
你有NumberStyles.AllowTrailingSign,它应该是NumberStyles.AllowLeadingSign,否则它不会接受 - 符号。
答案 3 :(得分:1)
你有一个不是数字中使用的减号的字符(你有连字符,而不是破折号)。你必须更换它,没有别的"优雅"办法。这两个角色在视觉上彼此相似,但它们并不意味着在不改变意义的情况下互相替换。
var climateString = "−2.8";
var number = double.Parse(climateString.Replace("−","-"));
答案 4 :(得分:0)
我建议使用TryParse而不是Parse方法,因为它会轻轻地处理你的错误(如果有的话)。
代码 -
var test1 = "-123.95";
decimal result;
decimal.TryParse(test1, out result);
您将在结果中解析双值。