0

アカウント残高を含む 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, '', ',');
4

2 に答える 2

1

次のような ROUND 関数を試すことができます

ROUND(SUM(AES_DECRYPT(a.acct_balance, '".DBKEY."')))
于 2013-04-20T04:58:27.670 に答える
1

これと同じくらい簡単かもしれませんか?

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

それは丸められた値の合計になります

于 2013-04-20T05:00:33.643 に答える