mysql - 保存期间小数部分舍入错误

标签 mysql cakephp floating-point save rounding

我的问题是小数部分舍入不好。我在循环中保存数据。仅最后更新的项目被错误更改。
例如 - 保存的号码是 13778.12888,表中的值是 13778,1。保存:
$this->save($data) - debug($data) 显示正确的值。

最佳答案

当您选择定义为FLOAT(n)且n小于25的浮点类型列时,MySQL似乎将输出四舍五入为6位有效数字,这绝对令人惊讶。不过,该值以 IEEE 单精度 float 的全精度存储。要获得完全精度的值,您可以使用一个简单的技巧,例如添加 0;检查一下:

create table numbers (f float(24));
insert into numbers set f = 12345678;
select f from numbers;
-- 12345700
select f + 0 from numbers;
-- 12345678

使用 double 类型FLOAT(53),您不会获得这种舍入效果,但它将使用两倍的存储空间。

关于mysql - 保存期间小数部分舍入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18182186/

相关文章:

php - SQL 搜索查询不返回任何结果

mysql - 如何重构这段MySQL代码?

cakephp - 如何从 Controller 传递简单数据以在cakePHP中进行查看

c - float 到 int 意外行为

mysql - C 应用程序特殊字符 Äöü 未在 MySQL 和终端中正确显示

MySQL - 向列添加 CHECK

performance - 为什么C++中 float 除法比整数除法快?

c++ - 你能安全地检查无穷大的符号吗?

php - 为什么此上传文件代码在 CakePHP 中不起作用

php - CakePHP - 多个 hasAndBelongsToMany 关系不起作用