我正在测试double[]
数组的网络xml序列化,所以我有兴趣知道什么是具有大多数字符的双值,它是序列化的,所以我可以测试序列化数组的最大输出大小。 / p>
答案 0 :(得分:6)
应该是24岁。
double.MinValue.ToString("R").Length
或“R”,如果数字可以用该精度表示,则返回15位数;如果数字只能以最大精度表示,则返回17位数。
你有最多17位数字,加上1表示符号,加1表示小数点分隔符加上5表示E + xxx(double.MaxValue
是1.7976931348623157E+308
和double.Epsilon
,最小值> 0
为4.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_SDECIMAL和LOCALE_SNEGATIVESIGN,显然在.NET中可以忽略终止null
字符
答案 1 :(得分:0)
你可以尝试-1.0 / 3.0
,它会有很多小数。