2016-04-13 3 views
1

Я создаю приложение с Laravel 5.0 и локально (в пределах усадьбы) все работает так, как ожидалось.PHP Неоднозначная проблема с плавающей точкой

Однако при развертывании проекта возникает ряд проблем. Один из них включает в себя поплавки.

Homestead - это PHP 5.6, а мой сервер - 5.5.9. Когда я рассматриваю цену в своей локальной системе, она выглядит правильно как 9.99. Однако на моем сервере он отображается неправильно, а вместо него - 9.99000.

В моей схеме есть поле цены, установленное на float (12,5), следовательно, это дополнительное дополнительное дополнение.

Вопрос в том, какая разница между PHP 5.5 и 5.6 (или даже PDO/Eloquent), что может вызвать проблему с плавающей точкой?

+0

Каков код, который отвечает за вывод этих значений? – Bogdan

+0

Это стандартный красноречивый. Если I '{{$ product-> price}}' php 5.5 отобразит '9.99000', где, когда php 5.6 отобразит' 9.99'. – ash

+0

Является ли версия РСУБД отличной от разработчика? – Bogdan

ответ

2

Нет никакой разницы между версиями PHP, которые могли бы вызвать это. Однако существуют различия между различными драйверами mysql, и это может вызвать проблему, которую вы видите.

Усадьба поставляется с установленным php5-mysqlnd, который является «родным водителем MySql». При использовании этого драйвера плавающие точки и целые числа, полученные из базы данных, будут назначаться как числовые типы данных в PHP. Если вы не используете собственный драйвер (php5-mysql), плавающие точки и целые числа, полученные из базы данных, будут назначаться как строки в PHP.

Следующий код демонстрирует, как это влияет на результат:

$f = 9.99000; 
$s = "9.99000"; 

echo $f; // shows 9.99 
echo $s; // shows 9.99000 

Вы можете проверить, чтобы увидеть, если сервер использует собственный драйвер с помощью команды php -i | grep mysqlnd. Это просто поиск через ваш phpinfo() для любого упоминания родного драйвера. Если это ничего не возвращает, вы не используете собственный драйвер, и ваши числовые данные будут возвращены в виде строк.

Если у вас не установлен собственный драйвер, вам нужно будет удалить старый драйвер и установить новый драйвер:

apt-get remove php5-mysql 

apt-get install php5-mysqlnd 

Предполагая, что это был ваш вопрос, в первую очередь, это будет исправить. Вы также можете проверить this question and answer для получения дополнительной информации.

+0

Вау, спасибо. Я узнал что-то новое здесь и спасибо за ссылку, которую я хотел бы найти. – ash

Смежные вопросы