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也是不正确%f的double
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不同于scanf和printf,这个C FAQ文章有一些很好的解释.