我有一个含有MySQL表帐户余额,(因为这些值是AES_ENCRYPTED),其被存储为浮点数,具有两个小数位,以varbinary列类型。如何执行MySQL的'SUM',但'0'小数位?
我意识到,这不是理想的存储值作为花车,并在以后的表,他们不再有,但我不能做这个传统表做任何事,所以需要用它来上班的。
我试图计算所有的结余,这点我是可以用下面的代码做的总和:
$s=$dbh->prepare("
SELECT
SUM(AES_DECRYPT(a.acct_balance, '".DBKEY."')) AS tBal
FROM
accounts a
INNER JOIN
coa c
ON
a.acc_id = c.acc_id
WHERE
c.acc_type_id = ?
AND
a.acc_type = 1
");
然而,一些报道也分别显示余额为零的小数位,如果您将它们加起来,即使将结果转换为小数点后的零位,通常也会得到与上述查询结果不同的结果,该结果使用值计算为两位小数。
我想我需要告知MySQL把每个值暂时转换为十进制的零个空间将它添加到正在运行的总之前,但我会怎么做呢?
$val = number_format($val, 0, '', ',');
+0
钱不要存为浮点数,你受到舍入误差的总和。有关保留精度的DECIMAL/NUMERIC数据类型,请参阅http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html。 –
2013-04-20 05:00:20