Как вы делите целые числа и получаете double в C#?
int x = 73;
int y = 100;
double pct = x/y;
почему я вижу 0 вместо .73?
6 ответов
потому что деление выполняется целыми числами, а затем преобразуется в double. Попробуйте вместо этого:
double pct = (double)x / (double)y;
Он делает то же самое во всех C-подобных языков. Если разделить два целых числа, получится целое число. 0.73-не целое число.
общая работа-это умножить одно из двух чисел на 1.0, чтобы сделать его типом с плавающей запятой или просто бросить его.
целочисленное деление отбрасывает дробную часть результата. Смотри:http://mathworld.wolfram.com/IntegerDivision.html
важно понимать поток выполнения в строке кода. Вы правы, предполагая, что установка правой части уравнения равна double
(слева) неявно преобразует решение в double. Однако выполнение потока диктует, что X / y оценивается сама по себе прежде чем вы даже добраться до double pct =
часть кода. Таким образом, с двух int
s разделены друг на друга, они будут оценивать до int
решение (в данном случае, округление до нуля)до неявно преобразуется в double.
как другие отметили, вам нужно будет бросить int
переменные double
s, поэтому решение выходит как double
, а не int
.
это потому, что тип левого операнда деления (x
) имеет тип int
, поэтому возвращаемый тип x / y
по-прежнему int
. Тот факт, что переменная назначения типа double
не влияет на работу.
Чтобы получить предполагаемый результат, вам сначала нужно бросить (преобразовать) x
to double
, например:
double pct = (double)x / y;