0

だから私はこのコードを持っています...

$remaining = $remaining + $row['total'];

これはforeachループにあります..

foreach($clientArrayInvoice as $key => $row)

その実行は、各レコードを通過し、合計をこの$remaining変数に追加することです。レコードの合計の一部は正の数であり、一部は負の数です。正常に動作しているよう$remainingですが、レコードで終了した後に変数を表示する必要がありますそして、これを結果の1つとして取得しました...

-2.84217094304E-14

これはどこからともなく出てきました。すべての数学を合計すると、そうあるべきでは0ないことがわかります-2.84217094304E-14

私は何を間違っていますか?

合計が得られるクエリは次のとおりです

select i.invoiceid as transactionid, i.date, i.total, 
i.total - (select ifnull(sum(p.amount), 0) from payment p where p.invoice = i.invoiceid) as remainingbalance,
'invoice' as transaction_type
        from invoice i inner join client c
        on i.client = c.clientid
        where i.isdeleted = 0 and i.client = " . $clientId . "
        union
select p.paymentid as transactionid, p.date,(0 - p.amount) as total, p.invoice, 'payment' as transaction_type
        from payment p inner join invoice i
        on i.invoiceid = p.invoice
        inner join paymenttype
        on paymenttype.paymenttypeid = p.paymenttypeid
        inner join client c
        on c.clientid = i.client
        where c.clientid = " . $clientId . "
        and i.isdeleted = 0
        order by date

ありがとう、そして私はその努力に感謝します。

4

1 に答える 1

0

お金を浮動小数点数として保管しないでください。たとえば、整数として保管してください (セント + 金額を として提示cents / 100) 。

またはhttps://www.google.com/search?q=money+datatypesから役立つものは何でも

于 2012-05-02T20:50:19.980 に答える