私が取り組んでいる金融アプリケーションで、符号付き整数とPHPで奇妙な問題を見つけようとしています。各取引の金額は符号付き整数で、私はSUM()
を使用して口座の残高を計算し、行の残高を出力する関数を持っています(行のid
とdate
の順)。負の数値を返す符号付き整数でアカウント残高を実行しています
アカウントの残高が0(-6.20程度)以下になるまで、すべてが正常に機能していたようです。デポジットが入力されると、単純に正の数に戻るのではなく、実行中の合計出力1.00と、それがネガティブとして読み込まれる前のほぼすべてのトランザクションの実行合計が、おそらく$ 0に近いかそれ以下のものを除きます。非常に困惑..ここに関数(クラスの一部):
public function fetchTransactions($limit = null) {
global $db;
$this->balanceAccount(); //Calls upon another function to return the balance
$runningTotal = $this->accountBalance;
$prevAmount = 0;
if (isset($limit)) {
$sql = "SELECT amount, payee, cat, date FROM transactions ORDER BY date DESC, id DESC LIMIT $limit";
} else {
$sql = "SELECT amount, payee, cat, date FROM transactions ORDER BY date DESC, id DESC";
}
$fetchTransactionsSQL = $db->query($sql);
while ($transactionDetails = $fetchTransactionsSQL->fetch()) {
$date = date("m/d", strtotime($transactionDetails['date']));
$payee = stripslashes($transactionDetails['payee']);
$category = $transactionDetails['cat'];
$amount = $transactionDetails['amount'];
$runningTotal -= $prevAmount; //I have also tried addition here
$prevAmount = $amount;
$amountOutput = (strpos($amount, '-') === true ? '-' . money_format("%n", $amount) : money_format("%n", $amount));
$runningTotalOutput = money_format("%n", $runningTotal);
echo "
<tr>
<td>$date</td>
<td><strong>$payee</strong></td>
<td>$category</td>
<td>$amountOutput</td>
<td>$runningTotalOutput</td>
</tr>
";
}
}
助けていただければ幸いです。ありがとう!いくつかの混乱を解消するには
EDIT =さらなる説明
。エントリはデータベースから降順に引き出されています。最後のトランザクションはMySQLテーブルの最後にあり、最初のトランザクションはページに表示されています。私は0で$prevAmount
を開始して、ループ中に現在のトランザクションの量に設定します。 $runningTotal
は全体の勘定残高として開始され、実行中の残高はループ中に前の取引の金額($prevAmount
)を$runningTotal
から差し引くことによって得られます。誰もが、私はすべての耳だこれを実現する簡単な方法を提案することができれば - 口座残高がこの全体の構築物は無意味である0
'$ runningTotal - = $ prevAmount;' - '$ prevAmount'はどこから来たのですか?私はそれが0に設定されているのを見て、次の行で '$ amount'に設定します。これらは間違った順序ですか? – Andre
説明を編集してください。 – NightMICU
実際の出力を投稿できますか? – Xint0