O alta metoda de a verifica daca un numar este intreg este urmatoarea :
if(x - int(x) == 0)
cout<<"x este numar intreg";
else
cout<<"x este numar real \ intreg";
Int(x) reprezinta partea intreaga a lui x .
Aceasta este aceiasi metoda ca cea prezentata de Paul pentru ca int(x) este aproximativ acelasi lucru cu floor(x), diferenta fiind ca in primul caz avem ca rezultat un int iar in al doilea un double, pe langa faptul ca nu funtioneaza prea bine in practica.
Pentru ca valorile reale sunt stocate ca aproximari atunci cand sunt implicate in operatii apar erori de calcul. Destul de des vom ajunge sa avem stocat in variabila x valoarea 3.99999...98 in loc de a avea 4. Depinde foarte mult de felul in care aceste operatii sunt implementate de compilator si poti sa fii sigur ca depind semnificativ intre gnu gcc, mingw gcc, visual c si borland c. Compilatoarele moderne sunt mai destepte si isi dau seama mai bine ce fel de valoari sunt stocate in variabilele de tip double dar poti sa experimentezi putin in borland c ca sa observi cum acest cod nu rezolva bine problema.
Codul lui Paul este varianta sigura de a testa daca o variabila double stocheaza un intreg.
O alta varianta de a vedea ce numere sunt intregi in cazul problemei tale este de a citi partea intrega si partea fractionara a valorilor in variabile intregi separate. Presupunand ca numele iti sunt date cu zecimale poti avea ceva de genul:
scanf("%d.%d", &partea_reala, &partea_fractionara);
if (partea_fractionara == 0) {
[ avem un intreg ]
}
Atunci cand nu stii cum ti se dau numerele poti sa scrii astfel:
scanf("%s", string);
if (sscanf(string, "%d.%d", &partea_reala, &partea_fractionara) == 1 || partea_fractionara == 0) {
[ avem un intreg]
}