gpt4 book ai didi

c - 出于什么原因 printf 不能正确显示 float ?

转载 作者:太空宇宙 更新时间:2023-11-04 01:03:09 26 4
gpt4 key购买 nike

我希望在所有情况下都显示 2.33,但是,为什么只有在第二种情况下才会出现这种情况?

printf("Without cast: %0.2f\n", 7 / 3); // Whitout cast: 0.00
printf("With cast: %0.2f\n", (float) 7 / 3); // With cast: 2.33
float x = 7 / 3;
printf("With var: %0.2f\n", x); // With var: 2.00

我刚刚注意到 float 的这种行为。如果我使用整数变量,则不会发生这种情况。

最佳答案

7/3 没有转换是整数除法,得到整数 2,因为任何余数都被丢弃,所以它等同于调用 printf("%0.2f\n", 2);

现在,为什么打印 0 而不是 2?嗯,你告诉它它是格式字符串中的一个 float ("%0.2f")。所以它将您的整数 (0b0...000000000000010) 解释为 float 。设置了这些位的 float 的计算结果为零,精度为 %0.2f

您的编译器应该已向您发出警告,指出格式说明符与传递的类型不匹配。 不要忽略编译器警告!

用cast就不同了,因为cast有优先权,所以(float) 7/37.0f/3一样,都是浮点除法.对于一个变量,您进行了整数除法,所以最后得到了 2,但是这两个被转换为 float ,所以 printf 正确地解释了它。

关于c - 出于什么原因 printf 不能正确显示 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com