C#: разделить int на 100

как мне разделить int на 100?

например:

int x = 32894;
int y = 32894 / 100;

почему это приводит к y будучи 328, а не 328.94?

5 ответов


когда одно целое число делится на другое, выполняется арифметика as целочисленной арифметики.

если вы хотите, чтобы он выполнялся как float, double или decimal арифметика, вам нужно привести одно из значений соответствующим образом. Например:

decimal y = ((decimal) x) / 100;

обратите внимание, что я изменил типа y также - нет смысла выполнять десятичную арифметику, но затем хранить результат в int. The int невозможно сохранить 328.94.

вам нужно только силу один значений правого типа, так как тогда другой будет повышен до того же типа - например, нет оператора, определенного для деления десятичного числа на целое число. Если вы выполняете арифметику, используя несколько значений, вы можете заставить все из них до нужного типа только для ясности - было бы неудачно, если бы одна операция выполнялась с использованием целочисленной арифметики, а другая-с использованием double арифметика, когда вы ожидали, что оба будут в двойном размере.

если вы используете литералы, вы можете просто использовать суффикс, чтобы указать тип:

decimal a = x / 100m; // Use decimal arithmetic due to the "m"
double b = x / 100.0; // Use double arithmetic due to the ".0"
double c = x / 100d; // Use double arithmetic due to the "d"
double d = x / 100f; // Use float arithmetic due to the "f"

Что касается того, следует ли использовать decimal, double или float, это зависит от того, что ты пытаешься сделать. Читайте мои статьи на десятичное число с плавающей точкой и двоичный с плавающей точкой. Обычно double соотвествующее если вы общаетесь с" естественными " количествами как высота и вес, где любой значение будет приблизительным; decimal подходит для искусственных величин, таких как деньги, которые обычно представлены точно как десятичные значения для начала.


328.94 не является целым числом. Целое число / деление округляет вниз; вот как это работает.

Я предлагаю вам привести к десятичной дроби:

decimal y = 32894M / 100;

или с переменными:

decimal y = (decimal)x / 100;

потому что int-это только целое число. Попробуйте это.

int x = 32894;
double y = x / 100.0;

потому что вы делаете целочисленное деление. Добавить срок за 100, и вы получите двойной вместо.

когда вы делите два числа, результат-целое число. Целые числа не имеют десятичных знаков, поэтому они просто усечены.


его Программирование фундаментально, что деление int(целое число) отличается от деления float(с плавающей запятой).

Если вы хотите .94 используйте float или double

var num = 3294F/100F