Double.Parse("NaN") 是不是正确解析?
Posted
技术标签:
【中文标题】Double.Parse("NaN") 是不是正确解析?【英文标题】:Does Double.Parse("NaN") parse correctly?Double.Parse("NaN") 是否正确解析? 【发布时间】:2012-08-05 01:47:37 【问题描述】:C# Double
是否正确解析“NaN”,即。 Double.Parse("NaN").ToString() == "NaN"
?
【问题讨论】:
LinqPad 为我返回True
为 Double.Parse("NaN").ToString() == "NaN"
正确的测试应该是Double.Parse("NaN") == double.NaN
。
注意“NAN”会产生解析异常。我在从 C++ 程序向 .NET 程序发送双精度字符串时遇到了这个问题。
【参考方案1】:
var d = Double.Parse("NaN");
Console.WriteLine(d); // prints "NaN"
我在 en-US 语言环境下运行。正如乔伊所说,要小心这个。当我指定不变文化时,我得到了相同的结果(在这些情况下通常应该这样做):
var d = Double.Parse("NaN", CultureInfo.InvariantCulture);
Console.WriteLine(d.ToString(CultureInfo.InvariantCulture)); // prints "NaN"
【讨论】:
WriteLine
将在我的系统上打印n. def.
。如果您要传递明确的文化,那么您也必须在打印值时这样做。
@Joey:老实说,我没有想到 - 我想我认为“NaN”是一个跨区域不变量,有点像用于识别元素周期表上的元素的符号。改变;谢谢。
检查CultureInfo.CurrentCulture.NumberFormat.NaNSymbol
。如果您有一个不是只读的NumberFormatInfo
(例如,您可以通过Clone
获得一个),您甚至可以将自己喜欢的字符串分配给NaNSymbol
。【参考方案2】:
试试看:
PS> $ic = [Globalization.CultureInfo]::InvariantCulture
PS> [double]::parse('NaN', $ic).ToString($ic)
NaN
但是,此字符串的解析和输出取决于区域设置,因此请确保始终传递文化或不要对格式做出过多假设。
【讨论】:
是的,我第一次尝试时就被语言环境问题所困扰;) PowerShell,是的。一种无需使用 ConsoleApplication2345 启动 Visual Studio 即可快速试用 .NET 的好方法。以上是关于Double.Parse("NaN") 是不是正确解析?的主要内容,如果未能解决你的问题,请参考以下文章
Decimal.Parse 和 Double.Parse System.FormatException 不同的行为
ASP.NET 中Double.Parse(String)转换问题
LINQ to Entities 无法识别方法 'Double Parse(System.String)' 方法,并且此方法无法转换为存储表达式