Как вы делите целые числа и получаете 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, чтобы сделать его типом с плавающей запятой или просто бросить его.


потому что операция все еще находится на тип int. Попробуй!--0-->


целочисленное деление отбрасывает дробную часть результата. Смотри:http://mathworld.wolfram.com/IntegerDivision.html


важно понимать поток выполнения в строке кода. Вы правы, предполагая, что установка правой части уравнения равна double (слева) неявно преобразует решение в double. Однако выполнение потока диктует, что X / y оценивается сама по себе прежде чем вы даже добраться до double pct = часть кода. Таким образом, с двух ints разделены друг на друга, они будут оценивать до int решение (в данном случае, округление до нуля)до неявно преобразуется в double.

как другие отметили, вам нужно будет бросить int переменные doubles, поэтому решение выходит как double, а не int.


это потому, что тип левого операнда деления (x) имеет тип int, поэтому возвращаемый тип x / y по-прежнему int. Тот факт, что переменная назначения типа double не влияет на работу. Чтобы получить предполагаемый результат, вам сначала нужно бросить (преобразовать) x to double, например:

double pct = (double)x / y;