繁体   English   中英

为什么printf输出double的随机值,而int输出0.000000?

[英]Why does printf output random values for double and 0.000000 for int?

我知道这是一个简单的问题,但是在我编码时就出现了,我想知道它现在是如何工作的。 因此,我的第一个问题是,当给printf赋予一个如下所示的整数,但是期望一个%f浮点值时,为什么总是输出0.000000? 我在Linux终端上的GCC中运行它。

int main() {

int a = 2, b = 5, result = 0;
result = b/a*a;

printf("%f\n", result);
}
//Above printf statement outputs 0.000000 every time.

然后,当我使用下面的代码并在期望%i整数值时给printf加倍时,输出始终是随机/垃圾。

int main() {

double a = 2, b = 5, result = 0;
result = b/a*a;

printf("%i\n", result);
}
//Above printf statement outputs random numbers every time.

我完全理解上面的代码是不正确的,因为printf输出类型与我输入的类型不同,但是我希望它对每种错误形式都以相同的方式起作用,而不是像这样更改。 刚引起我的好奇心,所以我想我会问。

基本上是因为,如果您将构成一个小整数的位解释为好像是一个双精度型,则它看起来像是0的双精度值。而如果您将代表一个小双精度值的那些位解释为一个整数,则看上去就更像是有趣。 以下是指向页面的链接,该页面描述了如何使用位表示双精度数http : //en.m.wikipedia.org/wiki/IEEE_floating_point 有了这个链接和一点耐心,您实际上可以算出给定double将被解释为的整数值。

您使用了错误的格式说明符

int a = 2, b = 5, result = 0;
result = b/a*a;

printf("%d\n", result);

...

double a = 2, b = 5, result = 0;
result = b/a*a;

printf("%f\n", result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM