我正在测试double []数组的net xml序列化,所以我有兴趣知道什么是具有大多数字符的双重值,它是序列化的,所以我可以测试序列化数组的最大输出大小.
解决方法:
它应该是24.
double.MinValue.ToString("R").Length
or “R”, which returns 15 digits if the number can be represented with that precision or 17 digits if the number can only be represented with maximum precision.
你有最多17位数,加1为符号,加1为小数分隔符加5为E xxx(double.MaxValue为1.7976931348623157E 308和double.Epsilon,最小值> 0,为4.94065645841247 E-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