Преобразование деления int в int на десятичное число дает 0 [duplicate]

Sam спросил: 28 марта 2018 в 03:40 в: c#

У этого вопроса уже есть ответ:

  • Why does integer division in C# return an integer and not a float? 7 ответов

Я придумал формулу, чтобы номера были простыми int и был удивлен чтобы увидеть следующее: 0.

var x = 45;
var y = 100;
var z = Convert.ToDecimal(x / y * 100);

В приведенном выше примере кажется почти смехотворным, что я делясь на 100, а затем умножая на 100, но в большинстве случаев значения x и y не являются целыми числами.

Когда мой x и y значения становятся целыми числами, приведенное выше преобразование создает 0. Почему это?

2 ответа

Есть решение
Erez.S ответил: 28 марта 2018 в 03:43

X / Y = 0,45

Int. Преобразование 0,45 равно 0.

Следовательно, 0 100 = 0.

Следовательно, Convert.ToDecimal (0) это 0.

Sam ответил: 28 марта 2018 в 03:44
Итак, мне нужно сначала Convert.ToDecimal(x/y), а затем продолжить с остальными вычислениями?
Erez.S ответил: 28 марта 2018 в 03:45
Попробуйте сначала преобразовать их в десятичную или определите их как десятичные с начала, если это возможно.
john ответил: 28 марта 2018 в 03:45
@Sam Вы можете просто сделать x / (Decimal)y * 100.
Sam ответил: 28 марта 2018 в 03:46
Понял! Спасибо!
dasblinkenlight ответил: 28 марта 2018 в 03:45

Это выглядит немного странно, но проблема заключается в порядке вычисления выражений: сначала оцениваются аргументы Convert, и это делается в целых числах. Вот почему результат усекается.

Следует заменить диалог выражением, которое приводит к вычислению в десятичных числах:

var z = 100M * x / z;