2011-10-21 31 views
0

我一直在嘗試找出一個奇怪的問題,在簽署的整數和PHP在我正在處理的財務應用程序中。每筆交易的金額都是一個有符號的整數,我使用SUM()來平衡賬戶,並且具有應該輸出具有運行餘額的每個條目的功能,按行iddate以降序排列。使用帶符號整數運行帳戶餘額,返回負數

一切似乎工作正常,直到帳戶餘額低於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

+0

'$ runningTotal - = $ prevAmount;' - '$ prevAmount'從哪裏來?我只看到它被設置爲0,並在下一行中將其設置爲「$ amount」。這些順序是否錯誤? – Andre

+0

請參閱編輯說明.. – NightMICU

+0

你可以發佈實際輸出嗎? – Xint0

回答

0

一個簡單的情況下需要看我的代碼中的其他地方的問題。無論出於何種原因,我在開始餘額和帳戶餘額功能的輸出上都使用了number_format()。顯然這是數學運算的方式,在從這些函數中刪除它之後,所有東西都可以正常工作。糟糕的代碼噓,萬歲找出來!

0
$amountOutput = (strpos($amount, '-') === true ? '-' . money_format("%n", $amount) : money_format("%n", $amount)); 

這整個結構是沒有意義的。 money_format()已經完全能夠處理負數。你正在做的是將一個SECOND負號加到已經是負數的數字上。

$amountOutput = money_format('%n', $amount); 
+0

我很欣賞意見,但它輸出$ -10.00,我更喜歡 - $ 10.00 - 與問題無關。 – NightMICU

+0

啊!請接受我的道歉,你100%正確。我不知道爲什麼我編碼,也許這是我剛剛被打斷之前寫的一條線,只是忘了它。確實非常多餘,非常抱歉懷疑你,並感謝將它引入我的注意! – NightMICU