Double和Float格式显示不同的结果

Lin*_*sHi 2 c floating-point double

我认为double和float之间的区别是小数的精度.但是,我使用double和float会得到奇怪的结果,并且它们彼此之间并不相同.

第一段代码与float格式一起使用,产生正确的结果:

#include <stdio.h>

#define ABSOLUTE_VALUE(number)      ( ((number) < 0) ? -(number) : (number) )

int main (void)
{
    float number, absNumber;


    printf ("What number do you want to check the absolute value for? : ");
    scanf  ("%f", &number);

    absNumber = ABSOLUTE_VALUE(number);

    printf ("The absolute value of %.2f is %.2f\n", number, absNumber);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:
您想要检查绝对值的是多少?:-3
-3.00的绝对值为3.00

第二段代码与double格式一起使用会产生错误的结果:

#include <stdio.h>

#define ABSOLUTE_VALUE(number)      ( ((number) < 0) ? -(number) : (number) )

int main (void)
{
    double number, absNumber;


    printf ("What number do you want to check the absolute value for? : ");
    scanf  ("%d", &number);

    absNumber = ABSOLUTE_VALUE(number);

    printf ("The absolute value of %.2d is %.2d\n", number, absNumber);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:
您想要检查绝对值的是多少?:-3
-03的绝对值是2147344384

Yu *_*Hao 15

在第二个示例中,%d用于整数.(d不是double的缩写,而是十进制的缩写)

scanf  ("%d", &number);
Run Code Online (Sandbox Code Playgroud)

应该

scanf  ("%lf", &number);
Run Code Online (Sandbox Code Playgroud)

printf也是不正确%fdouble

printf ("The absolute value of %.2d is %.2d\n", number, absNumber);
Run Code Online (Sandbox Code Playgroud)

相反,这应该是:

printf ("The absolute value of %.2f is %.2f\n", number, absNumber);
Run Code Online (Sandbox Code Playgroud)

请注意,格式说明符double不同于scanfprintf,这个C FAQ文章有一些很好的解释.

  • @BasileStarynkevitch不,以`scanf`的格式,`%f`用于`float`,`%lf`用于`double`.它的格式与`printf`不同. (2认同)