Solución:
Si bien es común que los nuevos programadores cometan este error de realizar la división de enteros cuando en realidad pretendían usar la división de punto flotante, en la práctica la división de enteros es una operación muy común. Si asume que la gente rara vez lo usa, y que cada vez que hace una división siempre debe recordar lanzar a puntos flotantes, está equivocado.
En primer lugar, la división de enteros es un poco más rápida, por lo que si solo necesita un resultado de número entero, uno querría usar el algoritmo más eficiente.
En segundo lugar, hay varios algoritmos que utilizan la división entera, y si el resultado de la división siempre fuera un número de punto flotante, se vería obligado a redondear el resultado cada vez. Un ejemplo fuera de mi cabeza es cambiar la base de un número. El cálculo de cada dígito implica la división entera de un número junto con el resto, en lugar de la división de punto flotante del número.
Debido a estas (y otras razones relacionadas), la división de enteros da como resultado un entero. Si desea obtener la división de punto flotante de dos enteros, solo tendrá que recordar lanzar uno a un double
/float
/decimal
.
Consulte la especificación de C #. Hay tres tipos de operadores de división
- División entera
- División de punto flotante
- División decimal
En su caso, tenemos la división de enteros, con las siguientes reglas aplicadas:
La división redondea el resultado hacia cero y el valor absoluto del resultado es el entero más grande posible que sea menor que el valor absoluto del cociente de los dos operandos. El resultado es cero o positivo cuando los dos operandos tienen el mismo signo y cero o negativo cuando los dos operandos tienen signos opuestos.
Creo que la razón por la que C # usa este tipo de división para enteros (algunos lenguajes devuelven resultados flotantes) es el hardware: la división de enteros es más rápida y sencilla.
Cada tipo de datos es capaz de sobrecargar a cada operador. Si tanto el numerador como el denominador son números enteros, el tipo entero realizará la operación de división y devolverá un tipo entero. Si desea una división de punto flotante, debe convertir uno o más de los números en tipos de punto flotante antes de dividirlos. Por ejemplo:
int x = 13;
int y = 4;
float x = (float)y / (float)z;
o, si está utilizando literales:
float x = 13f / 4f;
Tenga en cuenta que los puntos flotantes no son precisos. Si le importa la precisión, use algo como el tipo decimal.