2

Tengo una variable de tipo double llamada x a la que le realizo un cast al tipo de dato int. El problema es que durante la conversión se redondea el valor y quiero evitar eso.

La variable x antes de realizar el cast imprimo por pantalla y arroja 112.000000, pero luego al imprimir la otra variable arroja 111. No se porque este pasando esto.

En el código:

 double x = operacion + aritmetica; // Operacion que resulta 112.000000
 int    cast = (int) x;

 printf("%d", cast); // cast es 111

He probado con la funcion trunc pero sigue comportandose igual.

Islam Linarez
  • 609
  • 1
  • 7
  • 16

1 Answers1

3

Eso sucede porque x no vale exactamente 112.0000 sino 111.999999999999 y el sistema lo redondea a 112 debido a la incapacidad de mostrarte infinitos decimales.

Luego conviertes ese doble en un entero y los decimales se pierden, quedando el famoso 111.

Si esto es un problema puedes usar round(), que te redondeará el doble al entero más cercano:

111.6 -> 112

o bien puedes hacer una suma simbólica:

int cast = (int)(x + 1e-5);

De esta forma un número lo suficientemente cercano a 112, pero sin llegar a tal cifra, se transformará como por arte de magia en el tan ansiado 112

Adicionalmente te aconsejo leer esta otra pregunta:

eferion
  • 49,291
  • 5
  • 30
  • 72