Я тестирую сериализацию сетки xml массивов double[]
, поэтому мне интересно узнать, что такое двойное значение, которое имеет большинство символов, в котором оно сериализовано, поэтому я могу проверить, какой максимальный выходной размер сериализован массив.System.Double value с максимальными символами
ответ
Это должно быть 24.
double.MinValue.ToString("R").Length
или «Р», который возвращает 15 цифр, если число может быть представлено с той точностью, или если количество может только 17 цифр быть представлены с максимальной точностью.
у вас есть, что есть на максимум 17 цифр, плюс 1 для знака плюс 1 для десятичного разделителя, плюс 5 для E + ххх (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, очевидно, что символ окончания null
можно игнорировать в .NET)
Вы можете попробовать -1.0/3.0
, у него будет много десятичных знаков.