Para hacer una división y calcular el cociente o el resto, pero sin usar decimales, usamos las operaciones “división entera” y “resto” o “módulo” de nuestro lenguaje de programación preferido. Una discusión más completa está en la página sobre división entera y resto.
Las ventajas de hacer las operaciones puramente en enteros son:
- Es la cuenta que uno quiere hacer. Si uno quiere calcular, conceptualmente, la división entera, lo mejor es decirle al programa que haga la división entera. Además el código queda más claro y evidencia mejor lo que uno quiere hacer.
- Consecuencia de lo anterior, evitamos problemas de redondeo. Al calcular con decimales, podríamos obtener algo como 4,99999997 y al tirar los decimales queda 4 en vez de 5…
- Es más rápido: calcular los decimales y después tirarlos es un derroche. Dependiendo de la computadora, hacer esto puede ser unas 10 veces más lento, aunque en las computadora más nuevas la diferencia es mucho menor, quizás 2 veces.
En cada lenguaje hay que utilizar un símbolo ligeramente diferente para indicar estas operaciones.
Basic (QB)
División normal:
Print 7/3 ' Da 2.33333333333
División entera:
Print 7\3 ' Da 2
Resto de la división entera:
Print 7 mod 3 ' Da 1
Pascal
División normal:
WriteLn(7/3) { Da 2.33333333333 }
División entera:
WriteLn(7 div 3) { Da 2 }
Resto de la división entera:
WriteLn(7 mod 3) { Da 1 }
C/C++
Con C y C++ es un poquito más complicado elegir cómo divide, porque se usa siempre el mismo simbolito: '/'. C realiza una división entera cuando los operandos son enteros, y una división con decimales cuando cualquiera de los dos operadores tiene decimales (float o double). Lo que se puede hacer para forzar una división con decimales es convertir uno de los operandos a número con decimales. Por ejemplo, en vez de escribir a/b escribimos (a+0.0)/b (sumar 0.0 hace que el numero pase a tener decimales). Ojo: tiene que ser 0.0 y no para que funcione.
División normal:
printf("%f", (7 + 0.0)/3); /* Da 2.33333333333 */
En este caso, en vez del truquito de sumar 0.0, podemos hacer algo un poco más fácil de leer (aunque con el riesgo de pasarlo por alto por ser demasiado sutil):
printf("%f", 7.0/3); /* Da 2.33333333333 */
División entera:
printf("%d", 7/3); /* Da 2 */
Resto de la división entera:
printf("%d", 7%3); /* Da 1 */
(Nota: en C++ es mejor usar cout << que printf.)
Números negativos
Nota 2: en todos los lenguajes hay que tener cuidado cuando alguno de los operandos es un número negativo, porque el resultado podría no ser lo que queremos.