2011-10-21 6 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テーブルの最後にあり、最初のトランザクションはページに表示されています。私は0で$prevAmountを開始して、ループ中に現在のトランザクションの量に設定します。 $runningTotalは全体の勘定残高として開始され、実行中の残高はループ中に前の取引の金額($prevAmount)を$runningTotalから差し引くことによって得られます。誰もが、私はすべての耳だこれを実現する簡単な方法を提案することができれば - 口座残高がこの全体の構築物は無意味である0

+0

'$ runningTotal - = $ prevAmount;' - '$ prevAmount'はどこから来たのですか?私はそれが0に設定されているのを見て、次の行で '$ amount'に設定します。これらは間違った順序ですか? – Andre

+0

説明を編集してください。 – NightMICU

+0

実際の出力を投稿できますか? – Xint0

答えて

0

私のコードのどこかで問題を調べる必要がある単純なケース。何らかの理由で、私はnumber_format()を開始残高と口座残高の両方の関数の出力に使用していました。どうやら、これは数学的な操作の仕方になって、これらの関数からこれを取り除いた上で、すべてが動作するはずです。悪いコードのためのブー、それを見いだすためのhooray!

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

Argh!私の謝罪を受け入れてください、あなたは100%正しいです。なぜ私はそれをコーディングしたのか分かりません。おそらく、私が中断される直前に書いた行で、おそらくそれを忘れてしまったかもしれません。確かに非常に冗長なので、あなたを疑って申し訳ありません、そして、それを私の注目に持ってくれてありがとう! – NightMICU

関連する問題