收录日期:2020/12/06 00:59:33 时间:2016/08/28 00:11:45 标签:基础编程
使用如下代码进行查询(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还没发现该问题
建议你先补习一下计算机基础知识
存进去0.1显示出0.10000000000000001。无论用什么知识看也是个问题。
如果有高手帮从晶体管门电路出发一直到PDO源码详细讲解问题如何产生并最终给出解决方案,那这是个经典的讲解;
如果简单点,有高手帮忙指点出解决方案。那我也不胜感激。基础知识虽然我久没看了,但也不好意思麻烦高手在这帮我当老师,这是很多年前的老师做的事。
从数据库取出来的数据其实都是字符串型,后来你在你的应用中对这做了转换,因而出现了这个问题。这是无法避免,并且很难预期的,但你可以通过 round(0.10000000000000001, 1) 四舍五入为原数据
PDO读出来的确实都是字符串类型。现在的问题就是,我存进去的确定是0.1,数据库管理程序显示的也是0.1。但用PDO查询,查询结果我没做任何转换时,fetch到的这个字串就是0.10000000000000001了。
如果自己用round做个转换是可以得到0.1.但如果每个字段还需要自己转换那处理就很复杂了。我需要记住每个float字段,然后我还需要知道它得保留多少个小数位。这工作就像是噩梦。
所以我想请教下各位高手,PDO要如何设置处理,能保证查询得到的数值和存进去或者数据库显示的是一样。
float类型本身就不是精确的,你不能过分依赖它
大家碰到显示float型的数字都怎处理的?取出来后再逐个截断显示?那如果是在通用处理,根本不知道数组里某个字段类型的呢,又是如何处理?
这个问题应该很普遍吧,大家都如何处理?

JSP中,如何解决自动发邮件的问题? 怎么在pb的程序中运行其他的windows程序,如windows自带的计算器程序? 在MFC中如何实现COM+组件的客户端调用COM+组件 PHOTOSHOP5.0的问题? 放弃不甘心,继续没进展!! 关于FileCopy语句的问题!(给100分) 极品飞车五不能在win2000下面跑??怎么解决?? 如何在IE右键删除按钮? 问题出在哪? 大家讨论一下关于lotus项目管理方面的内容吧! 我用ADOQuery删除数据库后,要压缩数据库总出错说“被Admin以排它方式打开\',怎么办? 如何在ASP 中登录用户邮箱? to:CForce() 程序已收到,谢谢!请进 各位,这里有用过Sybase Replication Server的吗?帮帮我行吗?分不够我可以再给。 关于SQL SERVER中存储过程调用另一个存储过程的问题 用pb7(盗版)的anywhere数据库建了个库,但怎么也连不上,试一下它自带的两个demo,也是连不上数据库,怎么回事儿,是不是D版的问题? 急!急!关于win200 Advanced Server 和 win2000 Server 登陆域控制器问题???? 急,我给忘了!记得VB有一个函数可以把类似“123hello”这样的字符串转换成int类型值123,谢谢! 如何通过mcsd的认证考试? 紧急求助!!!project setting 的用处?? 数据库枚举? 怎样实现软件里“给作者写信”和“到作者主业”的功能,如flashget 大家帮帮忙,在win98下怎样改变驱动器号 请问怎样运行weblogic服务器? 菜鸟的问题!急急急!!! 请问这个怎么算? 请问如何将如何将IE的Internet选项中设置主页一项变成不可选. 如何翻转文字 Help,104分