我认为 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
的格式说明符对于 scanf
和 printf
是不同的,this C FAQ article有一些很好的解释。
关于c - double 和浮点格式显示不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18140331/