C #: Как мне сделать простую математику с округлением на целые числа? - PullRequest
19 голосов
/ 18 ноября 2008

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

137 * (3/4) = 103

Рассмотрим следующий неправильный код.

int width1 = 4;
int height1 = 3;

int width2 = 137;
int height2 = width2 * (height1 / width1);

Как правильно выполнять "целочисленную" математику в C #?

Мне действительно нужно сделать:

int height2 = (int)Math.Round(
      (float)width2 * ((float)height1 / (float)width1)
   );

Ответы [ 12 ]

0 голосов
/ 19 ноября 2008
int height2 = ((width2 * height1 * 10) + 5) / (width1 * 10);

Перед любым целочисленным делением проверьте, чтобы делитель не был равен нулю. Также обратите внимание, что это предполагает положительный коэффициент. Если отрицательный, округление должно быть -5, а не +5.

0 голосов
/ 18 ноября 2008

Подробно о сообщении Джеффри, поскольку у вас, как правило, больше шансов усечь необходимые десятичные дроби, чем у вас, при переполнении 32-разрядного целого числа (а также потому, что умножение и деление коммутативны), как правило, перед делением следует выполнять умножение.

...