Целочисленное деление и округление в C#



При делении одного целочисленного значения на другое с помощью оператора деления / результат всегда округляется до нуля. Другими словами- обрезается:



int n1 = 7 / 2;       // 3

long n2 = -7 / 2; // -3

short n3 = -11 / -3; // 3




Причину этого поведения я описывал в предыдущей заметке - целочисленные аргументы приводят к целочисленному результату.



При попытке поделить на значение, равное 0, мы получим исключение System.DivideByZeroException в runtime:



int i = 0;

int r = 7 / i; // DivideByZeroException




При попытке поделить на литерал 0 мы получим исключение на этапе компиляции:



int r = 7 / 0; // Division by constant zero




💬 Тем удивительнее оказывается тот факт, что в случае деления числа с плавающей точкой на ноль (1.0 / 0) вышеупомянутое исключение выброшено не будет. Мы просто получим в результате бесконечность (Infinity) 🙂



#basics