具有最大字符的System.Double值

时间:2013-09-04 11:47:11

标签: c# xml serialization .net-4.0 datacontractserializer

我正在测试double[]数组的网络xml序列化,所以我有兴趣知道什么是具有大多数字符的双值,它是序列化的,所以我可以测试序列化数组的最大输出大小。 / p>

2 个答案:

答案 0 :(得分:6)

应该是24岁。

double.MinValue.ToString("R").Length

来自double.ToString(string)

  

或“R”,如果数字可以用该精度表示,则返回15位数;如果数字只能以最大精度表示,则返回17位数。

你有最多17位数字,加上1表示符号,加1表示小数点分隔符加上5表示E + xxx(double.MaxValue1.7976931348623157E+308double.Epsilon ,最小值> 04.94065645841247E-324,因此两者都采用E[+-][0-9]{1,3}形式。

请注意,在技术上,在一些奇怪的语言中,

var str2 = double.PositiveInfinity.ToString("R");

可能会更长(因为字符串已本地化),但我希望您使用CultureInfo.InvariantCulture序列化您的数字!

但请记住,用户可以从控制面板改变他们的文化......例如:

var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NegativeSign = "Negative";
culture.NumberFormat.NumberDecimalSeparator = "DecimalSeparator";
var str4 = double.MinValue.ToString("R", culture);

结果:Negative1DecimalSeparator7976931348623157E+308

出于这个原因,最好使用CultureInfo.InvariantCulture: - )

但是如果你想知道真相,在控制面板中,小数点分隔符可以长达3个字符,负号表示最多4个(你可以尝试,或者你可以查看LOCALE_SDECIMALLOCALE_SNEGATIVESIGN,显然在.NET中可以忽略终止null字符

答案 1 :(得分:0)

你可以尝试-1.0 / 3.0,它会有很多小数。