我一直在嘗試找出一個奇怪的問題,在簽署的整數和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表的末尾,但是第一個顯示在頁面上。我開始$prevAmount
爲0,然後在循環過程中將其設置爲當前事務的金額。 $runningTotal
作爲總帳戶餘額開始,運行餘額通過在循環期間從$runningTotal
減去前一筆交易的金額($prevAmount
)獲得。如果任何人都可以提出一個更簡單的方法來做到這一點,我所有的耳朵 - 這真是棒極了,直到賬戶餘額跌破0.1
'$ runningTotal - = $ prevAmount;' - '$ prevAmount'從哪裏來?我只看到它被設置爲0,並在下一行中將其設置爲「$ amount」。這些順序是否錯誤? – Andre
請參閱編輯說明.. – NightMICU
你可以發佈實際輸出嗎? – Xint0