アカウント残高を含む MySQL テーブルがあります。これは浮動小数点数として格納され、小数点以下 2 桁で、varbinary
列型に格納されます (値が AES_ENCRYPTED であるため)。
値を float として保存するのは理想的ではなく、後のテーブルではもはやそうではありませんが、このレガシーテーブルについてはまだ何もできないので、そのままで作業する必要があります。
以下のコードで実行できたすべての残高の合計を計算しようとしています。
$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
");
ただし、一部のレポートでは残高が個別に小数点以下 0 桁まで表示されます。それらを合計すると、通常、結果を小数点以下 0 桁に変換した後でも、小数点以下 2 桁までの値を使用して計算される上記のクエリとは異なる結果が得られます。
現在の合計に追加する前に、各値を一時的にゼロの小数点以下のスペースに変換するように MySQL に通知する必要があると思いますが、どうすればよいでしょうか?
レポートに表示している値は、次を使用して変換されます。
$val = number_format($val, 0, '', ',');