php - 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();
我真的不想这样做,因为会有很多地方我必须这样做......仍在调查原因
解决方案
使用number_format($value, 2)
它肯定会起作用。
详细格式为:number_format($value, 2, '.', '');
推荐阅读
- python - 二叉树解的最大深度的内存使用
- c++ - 如何在 O(1) 时间内找到堆栈中的最小节点/元素
- html - 悬停时无法更改 CSS 边框颜色
- python - Python CPU 时钟。time.clock() vs time.perf_counter() vs time.process_time()
- javascript - 自动滚动和循环内容 DIV
- c# - 存储过程执行后如何显示返回值?
- html - 使用哪种表单加密类型?
- java - java - 如何解决Java Spring Boot Web项目中MongoDB集群的TLS版本问题?
- r - R:查找每个 i < j 的总和而不使用 for 循环
- c - 返回复合文字