PHP模糊浮点问题

时间:2016-04-13 22:11:57

标签: php pdo floating-point

我一直在使用Laravel 5.0和本地(在宅基地)构建应用程序,一切都按预期工作。

但是,当我部署项目时,很多问题都很明显。其中一个涉及花车。

Homestead是PHP 5.6,而我的服务器是5.5.9。当我在本地系统上查看价格时,它正确显示为9.99。但是,在我的服务器上,它无法正确显示,而是显示为9.99000。

我的架构将价格字段设置为浮点数(12,5),因此需要额外的右边距填充,这也是必需的。

我的问题是PHP 5.5和5.6(甚至PDO / Eloquent)之间的区别是什么导致浮点问题?

1 个答案:

答案 0 :(得分:2)

导致这种情况的PHP版本之间没有区别。但是,不同的mysql驱动程序之间存在差异,这可能会导致您遇到的问题。

Homestead附带template({ loginUrl: getUrlFor('loginRoute') }); ,即“MySql Native Driver”。使用此驱动程序时,从数据库中提取的浮点和整数将在PHP中指定为数值数据类型。如果您没有使用本机驱动程序(php5-mysqlnd),则从数据库中提取的浮点数和整数将在PHP中指定为字符串。

以下代码演示了这会如何影响您的输出:

php5-mysql

您可以使用命令$f = 9.99000; $s = "9.99000"; echo $f; // shows 9.99 echo $s; // shows 9.99000 检查服务器是否正在使用本机驱动程序。这只是通过您的php -i | grep mysqlnd搜索本机驱动程序的任何提及。如果这不返回任何内容,那么您没有使用本机驱动程序,并且您的数字数据将作为字符串返回。

如果您没有安装本机驱动程序,则需要删除旧驱动程序并安装新驱动程序:

phpinfo()

首先假设这是你的问题,这将解决它。您还可以查看this question and answer以获取更多信息。