【问题标题】: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 / 37.0f / 3 相同,都是浮点除法。用一个变量,你做了整数除法,所以结果是 2,但是这两个被转换成一个浮点数,所以 printf 正确地解释了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多