简体   繁体   中英

Program in c++ tell if a number is integer or float

I used function overload to check if an input number is integer or float. However I get this following error: error: call of overloaded 'retNr(double)' is ambiguous|

#include <iostream>
using namespace std;

void retNr(int x)
{
    cout << "The entered number is an integer. " << endl;
}

void retNr(float x)
{
    cout << "The entered number is a float. " << endl;
}

int main()
{
    cout << "Please enter a number: " << endl;
    cin >> nr;
    retNr(nr);
    return 0;
}

Read from cin into a string and then check the string for the presence of a decimal point. If there is a decimal point, call atof() on the string to convert it to a float, otherwise call atoi() to convert it to an integer.

You will have to initialize nr first.

Then you can use integer read & check it with a float if there is dot, ie ch=='.'

Thus, your program will be like this:

#include <iostream>
using namespace std;

int main()
{
    int nr = 0; char ch;
    cout << "Please enter a number: " << endl;
    cin >> nr;
    cin.get(ch);
    if(ch=='.')
    {
        cout << "The entered number is a float. " << endl;
    }
    else
    {
         cout << "The entered number is an integer. " << endl;
    }


    return 0;
}

Make some small change in:

void retNr(double x)
{
    cout << "The entered number is a double. " << endl;
}

Remember to declare your nr variable.

double d = 1.0;
int i = 1;

retNr(d);
retNr(i);

You may use abs() function for this issue.

#include<stdio.h>
#include<math.h>

int main()
{
   double input;
   scanf("%lf",&input);

   int absulate = abs(input);
   printf( (input==absulate)? "It is integer\n" : "It is float");

   return 0;
}

The question is wrong in its essence: A number it is not a float or an integer, but could be represented as a float or as an integer ( of course certain representation has some limitations ) So if I wrote ' 10 ' why should I say this is an integer? Could be a float too! Just if I want to use it as a float I would represent it as a float.

It's not too clear what you're asking for. If you really want to know whether a number is an integer or not, then use modf on it:

bool
isInt( double d )
{
    double dummy;
    return modf( d, &dummy ) == 0.0;
}

If you're reading a number, then read it as a double , and then use the above.

If you want to trigger off the format of the input (ie "10.0" will be treated as a floating point, even though it is an integer), then read the input as a string, then try to convert it to int ; if this eats all of the input, then it was entered as an int (no decimal or exponent), otherwise, try the same thing treating it as a double :

std::string entry;
std::cin >> entry;

char const* end;
long i = strtol( entry.c_str(), &end, 10 );
if ( *end == '\0' ) {
    //  entry was entered in integral format...
} else {
    double d = strtod( entry.c_str(), &end );
    if ( *end == '\0' ) {
        //  entry was entered in floating point format...
    } else {
        //  entry wasn't a number...
    }
}

I'd advise against this, however; it will only confuse your users if 0 isn't 0.0 .

float num = 7;
int n = (int)num;
float n1 = (float)n;
if(num == n1)
{
    cout << "Integer\n";
}
else
{
    cout << "Not Integer\n";
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM