2013-09-04 4 views
4

Я тестирую сериализацию сетки xml массивов double[], поэтому мне интересно узнать, что такое двойное значение, которое имеет большинство символов, в котором оно сериализовано, поэтому я могу проверить, какой максимальный выходной размер сериализован массив.System.Double value с максимальными символами

ответ

5

Это должно быть 24.

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

От double.ToString(string)

или «Р», который возвращает 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)

0

Вы можете попробовать -1.0/3.0, у него будет много десятичных знаков.