解析C#中的负双数时出现异常

Fri*_*ren 13 .net c# c#-3.0 c#-4.0

我正在编写一个代码,它可以从数据库中提取一些数据.问题是我想将负数字符串"-2.8"转换为double.我想,很简单.我先尝试过:

var climateString = "?2.8";
var number = double.Parse(climateString);
Run Code Online (Sandbox Code Playgroud)

有了这个结果:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
Run Code Online (Sandbox Code Playgroud)

所以我再想一想,在谷歌搜索,得到了新答案:

var climateString = "?2.8";
var styles = NumberStyles.AllowParentheses | NumberStyles.AllowTrailingSign |NumberStyles.Float | NumberStyles.AllowDecimalPoint;
var rit = double.Parse(climateString, styles);
Run Code Online (Sandbox Code Playgroud)

史诗再次失败:

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll
Run Code Online (Sandbox Code Playgroud)

我再想一想,我不能这么愚蠢,不知道怎么做这么简单的任务.我试过这个:

 var climateString = "?2.8";
 var doue = Convert.ToDouble(climateString, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

是的,再次完全相同的例外.我开始查看数字,并且我在负号上意识到了.仔细看这个数字"-2.8"这不是负数.这是负数"-2.8".再看看那些标志"----- -----"不一样.解析具有不同符号字符的字符串会抛出异常:S.所以,任何人都有一个想法,如何优雅地将其解析为C#中的双数?谢谢你!

Sør*_*ois 18

正确的方法:

var climateString = "?2.8"; 

var fmt = new NumberFormatInfo();
fmt.NegativeSign = "?";
var number = double.Parse(climateString, fmt);    
Run Code Online (Sandbox Code Playgroud)


Sør*_*ois 7

用破折号代替连字符:

var climateString = "?2.8".Replace ("?", "-");
var number = double.Parse(climateString);
Run Code Online (Sandbox Code Playgroud)

(不过,您可能希望留意来自该数据库的其他奇怪角色.)


小智 6

可能是旧帖子,但对于其他阅读此文章的人...

你有 NumberStyles.AllowTrailingSign,那应该是 NumberStyles.AllowLeadingSign 否则它不会接受 - 符号。