【问题标题】:For what reason printf does not correctly display the float?为什么 printf 不能正确显示浮点数?
【发布时间】:2015-06-07 22:29:37
【问题描述】:
我希望在所有情况下都显示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
我刚刚注意到浮动的这种行为。如果我使用整数变量,则不会发生。
【问题讨论】:
标签:
c
casting
floating-point
printf
【解决方案1】:
7 / 3没有强制转换是整数除法,结果是整数2,因为任何余数都被丢弃,所以相当于调用printf("%0.2f\n", 2);
现在,为什么打印的是 0 而不是 2?好吧,您告诉它它是格式字符串(“%0.2f”)中的浮点数。因此,它将您的整数 (0b0...000000000000010) 解释为浮点数。设置了这些位的浮点数计算为零,精度为%0.2f
您的编译器应该会警告您格式说明符与传递的类型不匹配。 不要忽略编译器警告!
使用强制转换就不同了,因为强制转换具有优先级,所以(float) 7 / 3 与7.0f / 3 相同,都是浮点除法。用一个变量,你做了整数除法,所以结果是 2,但是这两个被转换成一个浮点数,所以 printf 正确地解释了它。