保存期间小数部分舍入错误
Posted
技术标签:
【中文标题】保存期间小数部分舍入错误【英文标题】:Bad rounding of decimal part during save 【发布时间】:2013-08-12 08:10:31 【问题描述】:我的问题是小数部分舍入不当。我在循环中保存数据。只有最后更新的项目更改不正确。 例如 - 保存的编号是 13778.12888,表中的值是 13778,1。保存:$this->save($data) - debug($data)
显示正确的值。
【问题讨论】:
你是如何定义数据库中的列的? 浮动(11)。先前的值是正确的,只有最后更新的项不正确。 【参考方案1】:当您选择定义为FLOAT(n)
且n 小于25 的浮点类型的列时,mysql 似乎将输出四舍五入为6 位有效数字,这绝对是令人惊讶的。该值以 IEEE 单精度浮点数的全精度存储。要获得完全精确的值,你可以使用一个简单的技巧,比如加 0;看看吧:
create table numbers (f float(24));
insert into numbers set f = 12345678;
select f from numbers;
-- 12345700
select f + 0 from numbers;
-- 12345678
使用双精度类型FLOAT(53)
不会得到这种舍入效果,但会使用两倍的存储空间。
【讨论】:
谢谢。您的建议很有帮助。以上是关于保存期间小数部分舍入错误的主要内容,如果未能解决你的问题,请参考以下文章