2016-07-14 100 views
0

我使用腳本從Google財經獲取貨幣,然後將數據寫入數據庫。MySQL十進制9.99999999

但是當我這樣做,我得到9.99999999,而不是我發送的。我有我的InnoDB設置爲DECIMAL(9,8)。

$conn->set_charset('utf8');    

$add_currency_query = "INSERT INTO `currency_table` 
(`currency_rate`, `time_fetched`, `service`) 
VALUES ('$converted_amount', UTC_TIMESTAMP(), 'google-finance')"; 

我的PHP

$get = explode("<span class=bld>",$get); 
$get = explode("</span>",$get[1]); 
$converted_amount = preg_replace('/[^0-9\.]/', null, $get[0]); 

就如何解決這一問題/我做錯了什麼有什麼建議?

回答

1

DECIMAL(9,8)表示總共有9個符號,其中8個符號位於點之後。這意味着你只能存儲數字高達9.99999999如果你保存它高於一切,它可能保存爲9.99999999

建議:改變你的領域是像DECIMAL(20,8)

+1

它的怪異,因爲我」數進入的是61.5715。 '20,8'工作,但不應該有'9,8'也適用於這個數字? – Borsn

+1

那麼我的答案就是這樣。你節省了大於9的東西,並降低到該領域的最大可能值。嘗試將您的檔案更改爲DECIMAL(10,8),並且應該保存這樣的內容:)增加第一個數字以保存更高值的小數。 –

+0

明白了。謝謝! :) – Borsn

3

DECIMAL (9,8)表示9位數字共計和小數點後的8位。

那麼小數點的最大數是多少?它是9.99999999。當你發送的號碼大於可能存儲的號碼時,你會得到該號碼。當數值溢出時,MySQL只會儘可能高地存儲。