2016-07-14 4 views
0

Я получаю валюту из финансов Google с помощью скрипта, а затем я записываю данные в базу данных.MySQL Decimal 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

Его странно причина номер я m ввод -, 61.5715. '20,8' работал, но не должен был' 9,8' также работал на этот номер? – Borsn

+1

, тогда мой ответ точно так. Вы сохраняете нечто большее, чем 9, и оно уменьшается до максимально возможного значения для поля. Попробуйте изменить свою подачу на DECIMAL (10,8), и это должно сохранить такие вещи :) увеличьте первое число, чтобы сохранить десятичные значения с более высоким значением. –

+0

Получил это. Спасибо! :) – Borsn

3

DECIMAL (9,8) означает 9 цифр всего и 8 из них после десятичной точки.

Итак, каково максимальное количество этих десятичных чисел? это 9.99999999. Вы получаете этот номер, когда тот, который вы отправили, больше, чем можно сохранить. MySQL просто сохраняет как можно выше, когда значение переполняется.