2012-04-20 14 views
1

は次のとおりです。私は$campaign_ledgerは私が手var_dumpMySQLが正しいデータを取得しないのはなぜですか?私はCodeIgniterのアクティブレコードと私のコードを使用してい

$current_balance = $this->get_campaign_balance($click_report['campaign_id']); 

    $campaign_ledger = array(
    'campaign_id' => $click_report['campaign_id'], 
    'description' => "Click Deduction from script", 
    'amount'  => -1 * $click_report['advertiser_spend'], 
    'balance'  => "" . $current_balance - $click_report['advertiser_spend'], 
    'meta_data'  => $click_report['day'], 
    'timestamp'  => time() 
); 

    $this->db->insert('campaign_ledger', $campaign_ledger); 

array(6) { 
    ["campaign_id"]=> 
    string(3) "277" 
    ["description"]=> 
    string(27) "Click Deduction from script" 
    ["amount"]=> 
    float(-0.05) 
    ["balance"]=> 
    float(89.95) 
    ["meta_data"]=> 
    string(10) "2012-04-19" 
    ["timestamp"]=> 
    int(1334881599) 
} 

しかし、データは私のデータベースに入るとき、balanceは用91.36800000000001です何らかの理由で。それでは、どのように切断されていますか?

EDIT

DECIMAL(10,4)に変更した後、私はまだ出力として91.3680を取得します。

+0

データベースの残高フィールドのデータタイプは何ですか? –

+0

何を得る予定ですか? –

+0

私はFLOATとして持っていましたが、私はDECIMAL(10,4)に変更しました。まだオフです – Shamoon

答えて

1

通貨をMySQLでタイプ「DECIMAL」として保存するように注意してください。 Floatを使用すると、一貫性のない結果が得られます。あなたが使用したデータ型はここでは言いませんでしたが、おそらくDECIMAL(10,2)ではないことが分かります。

+0

私は 'FLOAT'として持っていましたが、DECIMAL(10,4)に変更してもまだオフです – Shamoon

+0

まだ "オフ" - あなたは何を保管していますか、そしてデータベースには何が見えますか?以前の内容をエコーし​​てから、未処理のクエリまたはphpmyadminでデータベースを調べる必要があります。次に、データベースから何を得るかを見てください。それは不適切な精度が来ているところで絞り込みます。あなたがお金を貯めているならば、ちょうどセント(10,2)を保存してください。何人かの人々が使用する別のトリックは小数点なしでお金を貯めることです。 100倍して大きなintとして保存してください。その後、ドルとセントに翻訳したいときは100で割ります。 –

+0

元の質問を編集しました。上記をご覧ください。私は標準の2桁の精度でお金を保管していません。私はより細かい方法が必要です。 – Shamoon

関連する問題