我刚注意到我的代码有点奇怪
我已经创建了一个简单的应用程序来向你展示我在说什么

float Test1 = 112.12;
float Test2 = 0.12;

printf("Test1 %15f", Test1);
printf("Test1 %15f", Test1);

我一直认为,如果我写Test1=112.12,这意味着它等于112.120000000
但是我得到了112120003
在第二个例子中,我得到0.11999或0.120000,这取决于
有人能解释一下为什么会发生这种情况吗?如果我试着把这两个数字分开,它们会被转换成双精度(或任何其他更精确的数据类型),这样我就能得到更高的精度,或者它们会以当前的形式(浮点)使用吗
我用VS2010来测试这个(如果重要的话)

最佳答案

两个观察结果:
计算机使用基2,而不是基10
浮点数不精确
因为第一点,有些数字不能很好地从我们的系统转换到计算机系统。0.3不能100%精确地用二进制直接表示(也不是说计算机不能精确地表示它,只是他们不能用常用的系统)。
由于第二点的原因,使用浮点数作为精确值总是很危险的。我建议阅读维基百科关于浮点数的文章——它提到了精度问题。

关于c - 打印浮点值到控制台精度问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8096797/

10-17 00:08