2016-07-14 54 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只会尽可能高地存储。