Когда одно целое число делится на другое, арифметика выполняется как целочисленная арифметика.
Если вы хотите, чтобы оно выполнялось как арифметика с плавающей, двойной или десятичной дробью, вам нужно привести одно из значений соответствующим образом. Например:
decimal y = ((decimal) x) / 100;
Обратите внимание, что я также изменил тип y
- не имеет смысла выполнять десятичную арифметику, но затем сохранять результат в int
. int
не может хранить 328.94.
Вам нужно только принудительно одно из значений получить правильный тип, так как тогда другой будет переведен в тот же тип - нет оператора, определенного для деления десятичной дроби на целое число, например. Если вы выполняете арифметику с использованием нескольких значений, вам может потребоваться принудительно все из них получить требуемый тип только для ясности - было бы неудачно, если бы одна операция выполнялась с использованием целочисленной арифметики, а другая - с использованием двойной арифметика, когда вы ожидали, что оба будут в два раза.
Если вы используете литералы, вы можете просто использовать суффикс для обозначения типа:
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
подходит для искусственных величин, таких как деньги, которые обычно представлены точно в виде десятичных значений для начала.