Bienvenido a Preguntas omegaUp, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Como saber si un numero es decimal en c++.

+1 voto

Es decir si tengo un numero N saber si contiene decimales.
Por ejemplo:
5 --> no tiene decimales
5.32 -->si tiene decimales
y como podria hacer para redondearlo

propuesto por RDEV (250 puntos) 11 de Mar, 2014
Estás leyendo el número de consola/archivo o lo tienes en una variable? Qué tipo es y cómo lo obtuviste?

También, lo de redondearlo es para después seguir utilizando el valor redondeado en el programa o es solo para imprimirlo redondeado en consola?
puedes clarificar tu pregunta por favor?

1 Respuesta

0 votos

La respuesta depende mucho del contexto. Si ya lo leíste y lo tienes en un float o un double, a veces, tú crees que tienes un entero, pero en realidad el valor difiere ligeramente de lo que esperarías por la manera en la que se representan los números en C++. Un ejemplo clásico es el siguiente código:

double x = 0.0;
for (int i = 0; i < 10; i++) x += 0.1;
printf("%f\n", x);
if (x != 1) printf("Diferente\n");

Eso imprime, contraintuitivamente,

1.000000
Diferente

Porque printf internamente redondea los números antes de imprimirlos. Realmente la única manera razonable de verificar si un número decimal "es un entero", es viendo si está suficientemente cerca de un número entero, e incluso eso puede fallar con números muy, muy grandes:

double entero = round(x);
if (fabs(x - entero) <= x * 1e-6) {
    printf("%f es lo suficientemente cercano a un entero y su valor es %f\n", x, entero);
}

En resumen, jamás utilices == o != cuando compares floats y doubles. En general, ten cuidado con los números de punto flotante y evita usarlos a menos que sea realmente necesario o en el problema te aseguren que hay cierta tolerancia.

respondido por lhchavez (31,670 puntos) 24 de Mar, 2014
Gracias... :DD
...