Преобразование десятичной под неанглийскими 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 в явном виде.

Другие вопросы по тегам