C#中的Double类型是否能正确解析"NaN",即
Double.Parse("NaN").ToString() == "NaN"
是否成立?var d = Double.Parse("NaN");
Console.WriteLine(d); // prints "NaN"
我正在使用en-US本地化运行。正如Joey所指出的那样,需要小心处理。当我指定不变性文化(在这种情况下通常应该这样做)时,我得到了相同的结果:
var d = Double.Parse("NaN", CultureInfo.InvariantCulture);
Console.WriteLine(d.ToString(CultureInfo.InvariantCulture)); // prints "NaN"
WriteLine
在我的系统上会打印 n. def.
。如果你正在传递显式的文化信息,那么在打印数值时也必须这样做。 - JoeyCultureInfo.CurrentCulture.NumberFormat.NaNSymbol
。如果您有一个不是只读的 NumberFormatInfo
(例如,您可以使用 Clone
获取一个),甚至可以将自己喜欢的字符串分配给 NaNSymbol
。 - Jeppe Stig Nielsen试一试:
PS> $ic = [Globalization.CultureInfo]::InvariantCulture
PS> [double]::parse('NaN', $ic).ToString($ic)
NaN
然而,对该字符串进行解析和输出是与地区相关的,因此请确保始终传递正确的文化信息或者不要对格式做出太多假设。
True
,因为Double.Parse("NaN").ToString() == "NaN"
。 - Blorgbeardfloat.isNaN(Double.Parse("NaN")) == true
。 - Петър Петров