Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何执行MySQL';总和';但是';0';小数位?_Php_Mysql_Floating Point_Numbers_Currency - Fatal编程技术网

Php 如何执行MySQL';总和';但是';0';小数位?

Php 如何执行MySQL';总和';但是';0';小数位?,php,mysql,floating-point,numbers,currency,Php,Mysql,Floating Point,Numbers,Currency,我有一个MySQL表,其中包含账户余额,以浮动形式存储,小数点后两位,列类型为varbinary(因为这些值是AES_加密的) 我意识到将值存储为浮点数并在以后的表中不再是浮点数是不理想的,但是我还不能对这个遗留表做任何事情,所以需要按原样使用它 我正在尝试计算所有余额的总和,我可以使用下面的代码进行计算: $s=$dbh->prepare(" SELECT SUM(AES_DECRYPT(a.acct_balance, '".DBKEY."')) AS tBa

我有一个MySQL表,其中包含账户余额,以浮动形式存储,小数点后两位,列类型为
varbinary
(因为这些值是AES_加密的)

我意识到将值存储为浮点数并在以后的表中不再是浮点数是不理想的,但是我还不能对这个遗留表做任何事情,所以需要按原样使用它

我正在尝试计算所有余额的总和,我可以使用下面的代码进行计算:

$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, '', ',');

您可以尝试使用如下函数

ROUND(SUM(AES_DECRYPT(a.acct_balance, '".DBKEY."')))

可能就这么简单

SUM(ROUND(AES_DECRYPT(a.acct_balance, '".DBKEY."')))

这将产生一个四舍五入值的总和

不要将钱存储为浮动,因为您会受到四舍五入错误的影响。有关保留精度的十进制/数字数据类型,请参阅。这在我的示例中现在起作用,但我认为公认的答案在函数排序(求和然后取整)方面可能更正确+1以便快速回答并引起我的注意。