我正在编写一个从数据库中提取数据的代码,问题是我想把一个负数字符串“-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#中优雅地将它解析为一个双精度数?谢谢!
5条答案
按热度按时间e5nszbig1#
正确做法:
xzlaal3s2#
用连字符替换破折号:
(You不过,我可能需要注意从该数据库中出现的其他奇怪字符。)
ddrv8njm3#
可能是一个老职位,但对于任何人阅读这篇文章...
您有NumberStyles.AllowTrailingSign,它可能应该是NumberStyles.AllowLeadingSign,否则它无论如何都不会接受-符号。
guicsvcw4#
我建议使用TryParse而不是Parse方法,因为它可以温和地处理错误(如果有)。
代码-
var test1 = "-123.95"; decimal result; decimal.TryParse(test1, out result);
您将在 result 中获得解析后双精度值。
3okqufwl5#
试试看: