У меня есть некоторые проблемы с преобразованием чисел <-> строк, которые я не могу разобрать.
Мы написали платформу сериализации, которая использует несколько методов сериализации xml. Но я видел некоторые несовместимые преобразования чисел в сгенерированном выводе:
с помощью:
var c = TypeDescriptor.GetConverter(double);
var s = c.ConvertToString(value);
и
var c = TypeDescriptor.GetConverter(double);
return c.ConvertFromString(value.Value);
Я получаю строки с разделителями-запятыми, такими как 3,33, и преобразованием обратно в удвоение, но будет ли преобразование обратно в удвоение работать и в другой стране, где точка используется как разделитель? (Я в Германии, мы используем запятую, но, кроме того, я хочу разделитель точек)
Затем в другой части кода я конвертирую двойные числа в некоторых структурах напрямую, добавляя его в XElement:
data.Add(new XElement("x", vector.x));
Конструктор XElement преобразует значение типа double в строку с точкой, например «3.33».
Становится очень странно, когда я хочу преобразовать эту строку обратно в двойную:
Double.TryParse(item.Value, out value.x);
и
value.x = Convert.ToDouble(item.Value);
оба игнорируют точку, и у меня двойное значение 333!?
, поэтому я попробовал это там также с кодом TypeConverter, но это дает мне исключение, что «3.33» не является допустимой строкой для двойного преобразователя ...
Теперь мне действительно нужно преобразование числа <->, которое всегда использует разделитель точек, а также анализирует его правильно, независимо от настроек культуры / локализации ...
я потерян .. что мне использовать? я даже пробовал такие вещи, как:
NumberFormatInfo provider = new NumberFormatInfo();
provider.NumberDecimalSeparator = ".";
provider.NumberGroupSeparator = " ";
provider.NumberGroupSizes = new int[] { 3 };
foreach (var item in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
item.NumberFormat = provider;
}
но это не помогло ..
спасибо за любую подсказку ..