2.03存储为2.0

时间:2017-03-24 18:23:32

标签: c int double type-conversion

较早的帖子指的是存储非终止数字或精度大于可以存储在double中的数字的问题。我的例子中的数字是终止小数,终止于第二个有效数字。

我有以下C代码,我已经在IDEONE.com和NetBeans中测试过,两者都给了我相同的输出。我还在三台不同的计算机上进行了测试:戴尔笔记本电脑,惠普笔记本电脑和戴尔台式机。这三个都是Windows 10,所以我不能说操作系统不是一个因素。

当我将双2.03乘以100并将其存储在int时,该值将存储为202而不是203。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
   double s, t, u;
   int a, b, c;
   s = .99;
   t = 2.03;
   u = 5.00;
   a = 100 * s;
   b = 100 * t;
   c = 100 * u;
   printf("\n%.12f\t%.12f\t%.12f", s, t, u);
   printf("\n%d\t%d\t%d", a, b, c);
   return (EXIT_SUCCESS);
}

我的输出是:

0.990000000000  2.030000000000  5.000000000000
99      202    500

我相当肯定它与双打的存储有关,如果我显示到16位小数,我确实看到了差异,但我不相信出去这么多是合理的小数位。

使用这些常见数字是否有意义当我将double强制转换为int时,我会看到这种差异,如果是这样,建议使用的编码是什么?

0 个答案:

没有答案