我已经在 SO 中进行了关于 float 的早期讨论,但这并没有阐明我的问题,我知道这个浮点问题在每个论坛中可能都很常见,但我的问题不关心浮点运算或比较。我比较好奇它用%f表示和输出。
问题很简单:“如何确定的确切输出:
float = <Some_Value>f;
printf("%f \n",<Float_Variable>);
让我们考虑这个代码片段:
float f = 43.2f,
f1 = 23.7f,
f2 = 58.89f,
f3 = 0.7f;
printf("f1 = %f\n",f);
printf("f2 = %f\n",f1);
printf("f3 = %f\n",f2);
printf("f4 = %f\n",f3);
输出:
f1 = 43.200001
f2 = 23.700001
f3 = 58.889999
f4 = 0.700000
我知道 %f(意味着 double )的默认精度为 6,我也知道问题(在这种情况下)可以通过使用 double 来解决,但我对输出很好奇 f2 = 23.700001
和 f3 = 58.889999
float 。
编辑:我知道不能精确表示 float ,但是获取最接近的可表示值的规则是什么?
谢谢,
最佳答案
假设您谈论的是 IEEE 754 float ,它的精度为 24 位二进制数字:以二进制(精确)表示数字并将数字四舍五入到第 24 位最重要的数字。结果将是最接近的 float 。
比如23.7
用二进制表示就是
10111.1011001100110011001100110011...
四舍五入后你会得到
10111.1011001100110011010
小数点是
23.700000762939453125
四舍五入到小数点后第六位
23.700001
这正是您的 printf
的输出。
关于c++ - 在 C/C++ 中使用 %f 确定 float 的输出(打印),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1851442/