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 为我返回 TrueDouble.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 不同的行为

输入字符串在 double.Parse 中的格式不正确

ASP.NET 中Double.Parse(String)转换问题

在 json 中发送 NaN

new Date()在ios下的坑

LINQ to Entities 无法识别方法 'Double Parse(System.String)' 方法,并且此方法无法转换为存储表达式