我正在测试double[]
数组的 net xml 序列化,所以我很想知道它被序列化的字符最多的 double 值是什么,所以我可以测试序列化数组的最大输出大小是多少。
问问题
1035 次
2 回答
6
应该是24。
double.MinValue.ToString("R").Length
或“R”,如果数字可以用该精度表示,则返回 15 位数字;如果数字只能用最大精度表示,则返回 17 位数字。
你有最多 17 位数字,加 1 表示符号,加 1 表示小数分隔符,再加上 5 表示 E+xxx (double.MaxValue
is1.7976931348623157E+308
和double.Epsilon
,最小值> 0
, is 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,明确终止null
字符在 .NET 中可以忽略)
于 2013-09-04T11:55:01.137 回答
0
你可以试试-1.0 / 3.0
,它会有很多小数。
于 2013-09-04T11:54:19.180 回答