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

时间:2013-08-09 05:08:26

标签: 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;
}

输出:
你想用什么号码来检查绝对值? :-3
-3.00的绝对值是3.00

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

#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

5 个答案:

答案 0 :(得分:15)

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

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有一些很好的解释。

答案 1 :(得分:2)

您的上一个printf格式字符串错误。应该是。

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

如果您启用所有编译器警告(例如使用gcc -Wall -g进行编译),您将收到有关该警告的警告。始终在编译器中启用所有警告。

您的scanf也是错误的,应该是scanf("%lf", &number);并且编译器会警告您的所有警告。

BTW,scanf返回“成功匹配的项目数”,您应该测试其结果。

您确实需要仔细阅读printf(3)scanf(3)的文档。 (在linux终端中,您可以键入man 3 printf来获取它。)

请注意,参数转换为doubledouble的转换说明符为%f中的printf%lf中的scanf

您应该学习如何使用调试器(例如gdb)。

答案 2 :(得分:2)

在你的第二个程序中,你使用%d格式说明符来表示错误。这就是你得到错误的原因。您应该使用%lf(长浮点或更好称为'double')进行打印。 对于其他格式说明符, 我想这可能会对你有所帮助 a link
您还可以通过键入“格式说明符”在Google上搜索不同的格式说明符。

答案 3 :(得分:1)

在c:

中使用 double 数据类型进行2次更改
use %lf in scanf
use %f in printf

//remember : %d is for int
             %f is for float
             %c is for char

答案 4 :(得分:0)

如果您阅读manual,则"%d"表示整数。您需要"%lf"代替。

使用printf

同上