2012-04-20 56 views
1

我用笨的活動記錄和我的代碼是:爲什麼MySQL不能得到正確的數據?

$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); 

當我var_dump$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) 
} 

但是,當數據進入我的數據庫中,balance91.36800000000001爲一些原因。那麼,有什麼關係呢?

編輯

變爲DECIMAL(10,4)後,我仍然得到91.3680作爲輸出。

+0

數據庫中的餘額字段的數據類型是什麼? – 2012-04-20 00:29:51

+0

你期望得到什麼? – 2012-04-20 00:31:09

+0

我把它作爲FLOAT,我改成了'DECIMAL(10,4)',但它仍然關閉 – Shamoon 2012-04-20 00:47:01

回答

1

請注意在MySQL中將貨幣存儲爲類型「DECIMAL」。如果你使用Float,你會得到不一致的結果。我知道你在這裏沒有說你使用了哪種數據類型,但是有些東西告訴我它可能不是DECIMAL(10,2)。

+0

我把它當作'FLOAT',但改成了'DECIMAL(10,4)',它仍然關閉 – Shamoon 2012-04-20 00:48:25

+0

當你說它是仍然「關閉」 - 你在存儲什麼,你在數據庫中看到什麼?您應該回應以前的內容,然後使用原始查詢或phpmyadmin查看數據庫。然後,看看你從數據庫中得到什麼。這會縮小精度不準確的地方。如果你存錢,只需存儲分(10,2)。有些人使用的另一個竅門是存儲沒有小數的錢。只需乘以100並存儲爲一個大整數。然後除以100,當你想翻譯回美元和美分。 – 2012-04-20 00:56:17

+0

編輯原始問題。請參閱上文。我不是以標準的2位精度存儲錢。我需要更多粒度的方式。 – Shamoon 2012-04-20 01:01:51

相關問題