C #: разделить int на 100 - PullRequest
8 голосов
/ 09 марта 2011

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

например:

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

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

Ответы [ 5 ]

18 голосов
/ 09 марта 2011

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

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

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

3 голосов
/ 09 марта 2011

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

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

decimal y = 32894M / 100;

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

decimal y = (decimal)x / 100;
3 голосов
/ 09 марта 2011

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

int x = 32894;
double y = x / 100.0;
0 голосов
/ 09 марта 2011

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

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

var num = 3294F/100F
0 голосов
/ 09 марта 2011

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

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

...