C:将Char转换为Float产生0.000002?

时间:2016-10-12 23:34:43

标签: c debugging casting char

#include <stdio.h>
#include <conio.h>
int main()
{
int a = 8; float b = 3.9; char c='a';
float hasil = a+b+c;
printf("%f", hasil);
getch();
return 0;
}

我得到了结果 108.900002

那么,0.000002是什么?

如果我改为

float hasil = a+b;

然后结果将是 11.900000

然后如果我们将char转换为浮动,那么肯定会增加值0.000002? 真的吗 ?如果是,为什么?

谢谢你

2 个答案:

答案 0 :(得分:3)

char c = 'a'将值97分配给c97 + 8 + 3.9实数为108.9,但它没有精确表示为浮点数。假的0.000002来自哪里。正如Keith Thompson指出的那样,实际值很可能是108.90000152587890625,但%f格式说明符可能会对其进行舍入。

这是因为只有有限数量的浮点数,而实际数字却不计其数。

答案 1 :(得分:2)

11.9和108.9都不能在float中准确表示。如果您使用double,您将获得更好的准确性。

如果更改打印精度,您将看到它们的准确程度。

#include <stdio.h>

int main()
{
   int a = 8; float b = 3.9; char c='a';
   float hasil = a+b;
   printf("%.16f\n", hasil);
   hasil = a+b+c;
   printf("%.16f\n", hasil);
   return 0;
}

输出:

11.8999996185302734
108.9000015258789062

通过将类型更改为double,我可以获得更准确的输出:

#include <stdio.h>

int main()
{
   int a = 8; double b = 3.9; char c='a';
   double hasil = a+b;
   printf("%.16f\n", hasil);
   hasil = a+b+c;
   printf("%.16f\n", hasil);
   return 0;
}

输出:

11.9000000000000004
108.9000000000000057

这些结果来自在Linux桌面上运行的gcc。我怀疑你会得到类似的,如果不完全相同,也会产生其他常见的编译器。