c - double 和浮点格式显示不同的结果

标签 c floating-point double

我认为 double 和 float 之间的区别在于小数的精度。然而,我使用 double 和 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;
}

输出:
您想检查哪个数字的绝对值? :-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;
}

输出:
您想检查哪个数字的绝对值? :-3
-03的绝对值为2147344384

最佳答案

在第二个示例中,%d 用于整数。 (d 不是 double 的缩写,而是 decimal 的缩写)

scanf  ("%d", &number);

应该是

scanf  ("%lf", &number);

printf 也不正确,因为 %f 用于 double

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

相反,这应该是:

printf ("The absolute value of %.2f is %.2f\n", number, absNumber);
<小时/>

请注意,double 的格式说明符对于 scanfprintf 是不同的,this C FAQ article有一些很好的解释。

关于c - double 和浮点格式显示不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18140331/

相关文章:

python - 非常奇怪的 numpy 数组浮点行为

java - 使用扫描仪获取输入未按预期打印

Java:使用 DecimalFormat 格式化 double 和整数,但保留没有小数点分隔符的整数

无法运行程序 "make": The system cannot find the file specified?

c - 如何在 C 中创建最低有效位设置为 1 的掩码

python round 和 int 的区别

c - 从c中的字符串中提取double

c - c中的固定长度字符串数组

c - 如何为 ffmpeg amix 过滤器指定多个输入

c++11 - std::numeric_limits::quiet_NaN() 与 std::nan() 与 NAN