C # está redondeando las divisiones por sí mismo

Cuando hago una división en C #, automáticamente se redondea hacia abajo. Mira este ejemplo:

double i; i = 200 / 3; Messagebox.Show(i.ToString()); 

Esto me muestra un cuadro de mensaje que contiene “66”. 200/3 es en realidad 66.66666 ~ sin embargo.

¿Hay alguna manera de evitar este redondeo y mantener un número como 66.6666667?

i = 200 / 3 está realizando una división de enteros.

Pruebe cualquiera de los siguientes:

i = (double)200 / 3

o

i = 200.0 / 3

o

i = 200d / 3

Declarar una de las constantes como un doble hará que se use el operador de doble división.

200/3 es una división entera, lo que da como resultado un número entero.

prueba 200.0 / 3.0

Puede especificar una cadena de formato con el número deseado de puntos decimales:

 double i; i = 200 / 3.0; Messagebox.Show(i.ToString("F6")); 

200 / 3 esta es una división entera. Cambie a: 200.0 / 3 para convertirlo en una división de coma flotante.

Aunque la respuesta es en realidad 66.666, lo que está sucediendo es que se está calculando 200/3, lo que da como resultado un número entero. El número entero se coloca en el flotador. Las matemáticas en sí están sucediendo como matemáticas enteras. Para que sea un flotador, use 200.0 / 3. El .0 causará que trate 200 como un flotante, lo que resulta en matemática de punto flotante.

Aparte del doble vs int que ocurre en esa acción, piensas en el doble como una unidad precisa. Intente utilizar el tipo de datos decimales cuando realmente se preocupe por la precisión.

Más información en esta respuesta: ¡ decimal contra doble! – ¿Cuál debería usar y cuándo?

doble i = 200.0 / 3;

doble i = ((doble) 200) / 3;

Lo que sucede es que los dos enteros realizan una división de enteros, y luego la respuesta entera se asigna al flotante. Para evitar eso, siempre lanza uno de los números como un doble.

Prueba esto

 i = 200d/3d; 

y no redondeará.

200 y 3 son ambos enteros, por lo que el resultado será un número entero. Convierte uno de ellos a un decimal.

Todas las respuestas dadas son incorrectas porque traducen la división de enteros 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, sumr 5 y dividir nuevamente, todo entero.

i = (2000/3 + 5) / 10

Estás atrapando una segunda división aquí, lo cual es mejor que hacer conversiones dobles, pero aún 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.