C - 如何检查数字是整数还是浮点数?

tdb*_*dbr 1 c floating-point integer

练习30
编写一个程序,读取以十进制扩展名开发的浮点值

  • 如果它是整数,则表示它是整数
  • 另一方面,它将其舍入为整数并写入结果.

记住数据控制

这是没有关于整数类型的消息的新消息.

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

int main(){
    double x;              //the argument of f(x)
    printf("Program demands x");
    printf("\nand writes the rounded value\n");
    printf("Author: xXx\n\n");
                          //loading data
    printf("Write x in float type in decimal extension  "); // after many tries, program is not rounding the value
    if (scanf("%lf",&x)!=1 || getchar()!='\n'){
        printf("Wrong data.\n");
        printf("\nEnd of program.\n");
        return 0;     
    }
    double round( double x );
    printf( "Rounded value is = %lf\n", x);
    printf("\nEnd of program.\n");
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 12

我建议如下:

  1. 将数字读入浮点变量val,例如。
  2. 将 的整数部分val放入一个 int 变量中truncated,例如。
  3. 检查valtruncated是否相等。

该函数可能如下所示:

bool isInteger(double val)
{
    int truncated = (int)val;
    return (val == truncated);
}
Run Code Online (Sandbox Code Playgroud)

您可能需要添加一些完整性检查,以防val超出可以存储在int.

请注意,我假设您想使用数学家对整数的定义。例如,此代码将"0.0"视为指定整数。

  • 小心的先生们,我们仍在讨论*计算机*,而不是*数学*。并非所有可能的整数都可以存储在“int”整数中——或者就此而言,存储在“float”或“double”中。OP 可能想用“整数”来澄清他的意思。(此外,`123.0` 是`123.00000001` 的完全合理的表示;) (2认同)

use*_*733 7

把事情简单化:

  1. 将输入作为字符串读入缓冲区 fgets(buffer, BUFFER_SIZE, stdin);

  2. 使用sscanf尝试读取整数:

    int i, r, n;
    r = sscanf(buffer, "%d%n", &i, &n);
    if(r == 1 && n == strlen(buffer)) {
        // is integer
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这里的额外长度检查是为了确保评估所有字符,并且12.3不接受数字等12.

  3. 如果上一步失败,请尝试读取浮点数:

    double dbl;
    r = sscanf(buffer, "%lf", &dbl);
    if(r == 1) {
            // is double
    }
    
    Run Code Online (Sandbox Code Playgroud)