所以这里的错误消息很简单,但我无法弄清楚为什么会发生这种情况。刚刚升级到 PHP 8 并尝试修复弃用问题。
我有 $object
,看起来像这样(所有字符串键):
Array
(
[a] => ABC
[b] => 599.97
[c] => 0.00
[d] => 50
[e] => Test
)
我有$field
,当我执行var_dump($field)
时,我得到float(1.05)
在我的代码中发生了以下情况:我想检查 $field
是否是 $object
的有效键。如果是,我想通过键使用访问的值,如果不是,我想使用 $field
作为值。
所以我有以下代码:
$a = $object[$field] ?? $字段;
然而,正是这行代码触发了以下警告:
已弃用 | PID:6978 |代码:8192 |消息:从 float 1.05 到 int 的隐式转换会丢失精度
我认为它可能与空合并有关,但此代码也触发了相同的警告:
$a = $object[$field];
请注意,这里的 $a
只是一个随机替代未使用的变量,我没有在其他地方键入提示或声明,当我使用这个虚拟变量时,警告仍然会发生。
为什么会发生这种情况?这里如何发生到 int
的隐式转换?试图解决这个问题让我发疯。
最佳答案
来自manual (强调我的)-
Additionally the following key casts will occur:
...
Floats are also cast to ints, which means that the fractional part will be truncated. E.g. the key 8.7 will actually be stored under 8.
...
关于php - 尝试访问数组时,从 float 到 int 的隐式转换会丢失精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72294648/