float数据的一个问题

来源:互联网 发布:数据归一化迭代公式 编辑:程序博客网 时间:2024/05/22 01:32

  前一段时间写单片机的计算器程序的时候,有一个类似于这样的表达式:

        int a = 4.35 * 100;
  结果a被赋值为434而不是435,当时解决的办法是在表达式上加上0.5,即int a = ( (4.35 * 100) + 0.5 );问题被解决,但不知原因,遂google,然后在stack over 上发现一个帖子,帖子说这是因为4.35在内存中不能精确的表达出来,它实际的值为4.3499999999.....这样当*100后得到的值为434.9999,按照float转int的默认规则,直接舍去小数部分得434;
  可我仍不明白这是为什么,于是上徳问提问,从而知道了float数据的储存采用IEEE754的标准来处理,但是。。。。我不觉得IEEE754的处理方式会导致值的丢失。。。。现在想通了:
  计算机是以二进制储存数据,当十进制的int 型数据转换成二进制时倒没什么问题,可float型转换时常常会丢失,这样就导致了不能准确的表示出float型的数据了,我果然是太迟钝了么。。。。