Перевод int в decimal при арифметических операциях C#

    Интересную штуковину обнаружил на днях, выполняя не сложную операцию деления целого на целое и присваивая результат переменной с типом decimal, компилятор не ругался но код отрабатывал не так как хотелось бы. В переменную decimal помещалось значение 0 в итоге.

Итак — Нерабочий пример кода:
int x = 23;
int y = 12345;
decimal result = x / y;
string str_result = result.ToString();


В результате выполнения данного кода в переменной str_result — будет «0»!
Тут я заподозрил что int надо сконвертировать предварительно в decimal, посмотрел как эта процедура описана в MSDN, мне показался тот метод довольно запутанным хотя я возможно не на тот наткнулся. В результате сделал по своему, наверняка медленнее — но для моей задачки это было не важно — зато работает.

Итак — Рабочий пример кода:
int x = 23;
int y = 12345;
decimal result = decimal.Parse(x.ToString()) / decimal.Parse(y.ToString());
string str_result = result.ToString();


При выполнении этого кода, в переменной str_result будет значение «0,001863102470635884973673552».

Если нам не надо столько знаков после запятой, то следует использовать форматирование:
string str_result = String.Format("{0:F4}", result);

{0:F4} — где цифра 4 — количество знаков после запятой.
В этом случае значение будет вот таким: «0,0018».

5 комментариев

avatar
Тут все проще можно сделать:
int x = 23;
int y = 12345;
decimal result = (decimal)x / y;
  • bob
  • +1
avatar
Прочитал статью, сразу возник такой же комментарий))
avatar
Да согласен я, ступил. :)
Статью не удаляю только из-за дельного комментария.
avatar
в чём разница между double и Double?
avatar
Это одно и то же.
System.Double — Это класс.
а double — это тип, по сути ссылка на этот класс, просто удобное для восприятия имя.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.