Todas las respuestas dadas son equivocadas porque traducen la división entera en una de tipo doble, que limpiamente no es lo que se pidió (al menos desde el punto de vista del rendimiento). La respuesta obvia es la matemática de la escuela primaria, multiplicar por 10, sumar 5 y dividir nuevamente, todo entero.
i = (2000/3 + 5)/10
Usted está cogiendo una segunda división aquí, que es mejor que no hacer dobles conversiones, pero todavía está lejos de ser perfecto. Puede ir aún más allá y multiplicar por otro factor y agregar otros valores que no sean cinco, lo que le permite usar el desplazamiento a la derecha en lugar de dividir entre 10. La fórmula exacta para hacer esto se deja como un ejercicio para el lector. (Solo google "divisiones con Multiply Shift")
Que tengas un buen día.
La lección importante aquí no es solo que la aritmética entera se hace en enteros. Más bien, es que los tipos de * operandos * son más relevantes para el análisis del programa que el tipo al que se le asigna el resultado. En C# casi siempre razonamos desde "adentro" a "afuera"; no decimos "oh, veo que estás asignando esto a un doble, entonces haré una aritmética de coma flotante". En cambio, decimos "Veo que estás dividiendo dos enteros, debes querer el resultado como un entero. Oh, quieres ese entero como un doble, luego lo convertiremos en un doble". –
Estoy viendo este "problema" actualmente también. Puedo ver desde abajo que las razones de por qué dividir dos enteros da como resultado un número entero, y estoy contento con eso. Sin embargo, lo que no puedo entender es lo siguiente: ¿Por qué C#/VB.Net redondea 200/3 en 66? Sabemos que si hacemos lo siguiente "200/3.0" terminamos con 66.6666667. Entonces, ¿por qué se redondea a 66 y no se redondea a 67? Si hago lo siguiente, termino con 67: Convert.ToInt32 (200/3,0) Así que mi decimal a int se convierte en 67, sin embargo, el tiempo de ejecución convertirá mi número a 66? – Oxonhammer