我不确定它的MySQL是否会切断Codeigniter中的数字或隐藏的配置,这是我正在使用的。
有问题的字段是:
`total` float(12,4) unsigned NOT NULL
这是数据的插入代码:
$data = array(
// ...
'total' => $datos['total'], // value is 577.82999999999
);
$res = $this->db->insert($this->tabla, $data); // Codeigniter DB insertion method
存储此值:
577.8300
不应该是:
577.8299 ??
答案 0 :(得分:2)
float(12,4)
表示您将total
值存储为12位数,而其中4位将用于存储小数部分。
这就是577.82999999999
成为577.8300
的原因。此外,它不会被存储为577.8299
,因为每个数字都必须舍入而不是忽略其余数字。
换句话说,想象你有相同的数字,但想要存储它只有2位数的小数部分。如果您忽略其他数字(不进行舍入),您最终会得到577.82
。然而,我们的原始数字更接近577.83
,因此我们失去了精确度。
更进一步:四舍五入的工作方式
以下算法显示了舍入的工作原理:
Get first digit after limit
if it is equal to or greater than 5
add 1 to digit at limit
end
因此577.82999999999
将变为577.8300
,因为1被添加到小数部分的第4位。这个数字是9
,导致1的传播,最终会在577.8300
。