[英]Why the pow function when used in printf() produce arbitrary results?
我在C-中有此代码
#include <stdio.h>
#include <math.h>
int main()
{
printf("%d",(12345/pow(10,3)));
}
它输出任意值,为什么不输出12? 上面的代码不等于-
#include <stdio.h>
#include <math.h>
int main()
{
int i=12345/pow(10,3);
printf("%d",i);
}
它输出12,为什么这两个代码输出不同的值?有人可以解释一下。
pow
返回一个double
,因此导致不确定的行为,因为您将其传递给需要int
的格式字符串,因为typeof(int / double) == double
。
尝试
printf("%lf\n", 12345 / pow(10, 3));
或使用明确的演员表,例如
printf("%d\n", 12345 / (int) pow(10, 3));
的结果pow
是类型double
,所以整个表达12345/pow(10,2)
具有类型double
。 不幸的是,您试图使用%d
转换说明符打印该double值,该说明符期望为int
值。
如果要输出整数,请执行以下操作:
printf( "%d", (int)(12345/pow(10,3)));
否则,将其打印为双精度:
printf( "%f", 12345/pow(10,3));
将12345/pow(10,3)
辅助为int时,结果将转换为int。
当将12345/pow(10,3)
传递给printf
, printf
一个double压入堆栈,但是printf
期望根据您的格式规范为int。
printf( "%g", 12345/pow(10,3));
这可以解决您的问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.