Преобразование десятичной под неанглийскими Windows
Я установил приложение C# под испанским MS Windows Server.
Так что этот код работает неправильно.
decimal? top = 80.0m;
double convertedTop = (double)decimal.Parse(top.ToString(), CultureInfo.InvariantCulture);
convertTop - 80000, но он должен быть 80.0
1 ответ
Решение
Не делай этого.
Ваш код крайне неэффективен.
Вы должны изменить это на
double convertedTop = Convert.ToDouble(top);
Если тип времени компиляции top
является decimal
или же decimal?
(в отличие от object
или же IConvertible
или же ValueType
), вы можете использовать еще более эффективное приведение во время компиляции:
double convertedTop = (double)top;
Чтобы ответить на вопрос, top.ToString()
чувствительна к культуре
Вам нужно пройти CultureInfo.InvariantCulture
там тоже.Nullable<T>
не поднимает ToString(IFormatProvider)
так что вам нужно сделать это на Value
и обрабатывать null
в явном виде.