首页 > 解决方案 > PHP 7.3 Laravel 数据库自动数字舍入错误

问题描述

我似乎找不到原因的奇怪错误:我的十进制数字在保存到数据库时会自动四舍五入 - 仅当我使用 PHP 7.3 时。使用 PHP 7.1 时不会出现问题(我正在使用 whm 的多 php 管理器在 2 个版本之间切换)

10.1.39-MariaDB Laravel 5.5,使用 eloquent,通过以下方式进行测试:

$model->num=1.23;
$model->save();

使用php 7.11.23时工作正常,我正确保存到数据库的值,但是当使用php 7.3时,该值向下舍入为1.00.

我可以看到 laravel 的查询构建器发送的实际 SQL 在这两种情况下都是正确的:UPDATE x SET num=1.23 WHERE id=x 所以在查询构建器和实际执行之间的某个地方,值被四舍五入。

我还编写了一个没有使用 Laravel 的纯 php 测试,mysqli_query("UPDATE ...")并且这在两个 php 版本中都可以正常工作,所以我认为问题可能出在某些 Laravel 数据库包不兼容上。

真的不知道从这里去哪里-有什么建议吗?

提前致谢。

更新

在 php 7.3 上,如果我先转换为字符串,我会正确地将值保存到 db:

$model->num= (string)1.23;
$model->save();

我真的不想这样做,因为会有很多地方我必须这样做......仍在调查原因

标签: phplaravelmariadb

解决方案


使用number_format($value, 2) 它肯定会起作用。

详细格式为:number_format($value, 2, '.', '');


推荐阅读