【问题标题】: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 程序发送双精度字符串时遇到了这个问题。

标签: c# .net double nan


【解决方案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 的好方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多