php - 尝试访问数组时,从 float 到 int 的隐式转换会丢失精度

标签 php

所以这里的错误消息很简单,但我无法弄清楚为什么会发生这种情况。刚刚升级到 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/

相关文章:

PHP/MySQL - 如何添加多个标签

php - PDO MYSQL 插入语句不起作用(未给出错误)

javascript - 在提交之前用 jquery/ajax 替换/编码 < 和 >

php - Yii2 ActiveFormencodeErrorSummary 属性...它的用途是什么?

php - 为什么 Joomla 或 #__session 表会删除我的 "session expired"条目而不刷新 html 页面?

php - 使用php和mysql显示相同别名的照片

PHP:Unicode 强调字符和变音符号

javascript - 如何在不刷新页面的情况下获取laravel数据?

php - 正则表达式,用于使用 “www.youtube/user/” -type Url提取youtube视频

php - 我在哪里可以获得 Laravel 事件的完整列表(由核心库触发)?