4

我正在测试double[]数组的 net xml 序列化,所以我很想知道它被序列化的字符最多的 double 值是什么,所以我可以测试序列化数组的最大输出大小是多少。

4

2 回答 2

6

应该是24。

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

double.ToString(string)

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

你有最多 17 位数字,加 1 表示符号,加 1 表示小数分隔符,再加上 5 表示 E+xxx (double.MaxValueis1.7976931348623157E+308double.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_SDECIMALLOCALE_SNEGATIVESIGN,明确终止null字符在 .NET 中可以忽略)

于 2013-09-04T11:55:01.137 回答
0

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

于 2013-09-04T11:54:19.180 回答