.net 在C#中解析负双精度数时出现异常

68bkxrlz  于 2022-11-19  发布在  .NET
关注(0)|答案(5)|浏览(176)

我正在编写一个从数据库中提取数据的代码,问题是我想把一个负数字符串“-2.8”转换成一个双精度数。我想这很简单。我首先尝试了:

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”。再看看那些符号“---------------------------------------------------------------------------------------------------------------------------------------------那么,有没有人有一个想法,如何在C#中优雅地将它解析为一个双精度数?谢谢!

e5nszbig

e5nszbig1#

正确做法:

var climateString = "−2.8"; 

var fmt = new NumberFormatInfo();
fmt.NegativeSign = "−";
var number = double.Parse(climateString, fmt);
xzlaal3s

xzlaal3s2#

用连字符替换破折号:

var climateString = "−2.8".Replace ("−", "-");
var number = double.Parse(climateString);

(You不过,我可能需要注意从该数据库中出现的其他奇怪字符。)

ddrv8njm

ddrv8njm3#

可能是一个老职位,但对于任何人阅读这篇文章...
您有NumberStyles.AllowTrailingSign,它可能应该是NumberStyles.AllowLeadingSign,否则它无论如何都不会接受-符号。

guicsvcw

guicsvcw4#

我建议使用TryParse而不是Parse方法,因为它可以温和地处理错误(如果有)。
代码-
var test1 = "-123.95"; decimal result; decimal.TryParse(test1, out result);
您将在 result 中获得解析后双精度值。

3okqufwl

3okqufwl5#

试试看:

decimal.TryParse(number, NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out decimal numberOut)

相关问题