php - 打印来自数据库的双字段时的 Laravel 问题
问题描述
我有 laravel 或 php 的问题(还不知道),问题是下一个:
我的数据库中有一个字段,debe
其值为 3.97,如下所示。该字段是一个double(11,2)
.
当我访问框架上的该字段时,例如使用 add()
它会正确返回值,如下所示。
主要问题发生在我尝试打印到视图中时,我收到下一个:
我不知道为什么会这样,但现在我发现的唯一解决方案是使用 PHPround()
函数对值进行舍入。
问候
解决方案
查看官方文档中的这篇文章:
浮点数的精度有限。尽管取决于系统,但 PHP 通常使用 IEEE 754 双精度格式,由于在 1.11e-16 的数量级四舍五入,这将给出最大的相对误差。非初等算术运算可能会产生较大的误差,当然,当多个运算复合时,必须考虑误差传播。
此外,可以精确表示为以 10 为底的浮点数的有理数,如 0.1 或 0.7,没有精确表示为以 2 为底的浮点数,无论尾数的大小如何,它都在内部使用。因此,它们不能被转换成它们内部的二进制对应物,而不会有小的精度损失。这可能会导致令人困惑的结果:例如, floor((0.1+0.7)*10) 通常会返回 7 而不是预期的 8,因为内部表示将类似于 7.9999999999999991118...。
所以永远不要相信浮点数结果到最后一位,也不要直接比较浮点数是否相等。如果需要更高的精度,可以使用任意精度的数学函数和 gmp 函数。
您可以使用round
ornumber_format
函数来获得所需的小数
推荐阅读
- javascript - 如何将空格字符从字母的前面移动到后面
- ruby - 如何基于哈希值合并哈希数组但不合并值而不是覆盖
- asp.net-core - 为什么从测试转移到 Asp.Net-Core 应用程序的生产完全不起作用
- sql - 从 postgresql 上的 json 数组中的每个 json 查询值
- javascript - 当前端和后端分开时,我如何根据数据库中的记录来呈现不同的按钮
- python - Python在组内重新采样和插值
- android - 是否可以覆盖 Dagger-2 构造函数注入进行测试?
- mysql - 对表列表中的每个条目运行查询
- java - 在 MyBatis for IBM DB2 中执行多个 INSERT 语句
- r - 如何将包含 0 和 cumsum 的新向量添加到数据帧?