使用如下代码进行查询(PDO)
 $stmt = $dbh->prepare($sql);
 $stmt->execute($parm);
 $record = $stmt->fetch( PDO::FETCH_ASSOC);假设有个字段AAA是FLOAT型,在数据库中,保存数值为0.1,数据库中显示也是正确的,为0.1
但查询结果,却是[AAA] => 0.10000000000000001,莫名的在小数点后加了很多位数 请问这是什么原因,需要对PDO如何设置才可以避免?
 用pgsql或者sqlsrv驱动都可能有这问题,mysql还没发现该问题

解决方案 »

  1.   

    存进去0.1显示出0.10000000000000001。无论用什么知识看也是个问题。
    如果有高手帮从晶体管门电路出发一直到PDO源码详细讲解问题如何产生并最终给出解决方案,那这是个经典的讲解;
    如果简单点,有高手帮忙指点出解决方案。那我也不胜感激。基础知识虽然我久没看了,但也不好意思麻烦高手在这帮我当老师,这是很多年前的老师做的事。
      

  2.   

    从数据库取出来的数据其实都是字符串型,后来你在你的应用中对这做了转换,因而出现了这个问题。这是无法避免,并且很难预期的,但你可以通过 round(0.10000000000000001, 1) 四舍五入为原数据
      

  3.   

    PDO读出来的确实都是字符串类型。现在的问题就是,我存进去的确定是0.1,数据库管理程序显示的也是0.1。但用PDO查询,查询结果我没做任何转换时,fetch到的这个字串就是0.10000000000000001了。
    如果自己用round做个转换是可以得到0.1.但如果每个字段还需要自己转换那处理就很复杂了。我需要记住每个float字段,然后我还需要知道它得保留多少个小数位。这工作就像是噩梦。
    所以我想请教下各位高手,PDO要如何设置处理,能保证查询得到的数值和存进去或者数据库显示的是一样。
      

  4.   

    float类型本身就不是精确的,你不能过分依赖它
      

  5.   

    大家碰到显示float型的数字都怎处理的?取出来后再逐个截断显示?那如果是在通用处理,根本不知道数组里某个字段类型的呢,又是如何处理?
    这个问题应该很普遍吧,大家都如何处理?