首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从浮点到int的隐式转换在试图访问数组时失去了精度。

从浮点到int的隐式转换在试图访问数组时失去了精度。
EN

Stack Overflow用户
提问于 2022-05-18 19:01:35
回答 2查看 816关注 0票数 2

所以这里的错误信息很简单,但我不知道为什么会发生这种情况。刚刚升级到PHP 8,并试图通过修复弃用来工作。

我有$object,它看起来像这样(所有字符串键):

代码语言:javascript
运行
复制
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] ?? $field;

然而,正是这一行代码触发了以下警告:

DEPRECATED | PID: 6978 | CODE: 8192 | MESSAGE: Implicit conversion from float 1.05 to int loses precision

我想这可能与空合并有关,但这段代码也会触发同样的警告:

$a = $object[$field];

请注意,这里的$a只是一个未使用的随机变量,我没有在其他地方键入提示或声明,当我使用这个虚拟变量时,警告仍然发生。

为什么会发生这种情况?这里是如何隐式转换到int的?我都快疯了想要解决这个问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-18 19:12:54

手册 (强调地雷)-

此外,还将发生以下键转换: ..。 浮点数也被转换为int,这意味着小数部分将被截断。密钥8.7实际上将存储在8.下面。 ..。

票数 1
EN

Stack Overflow用户

发布于 2022-05-18 20:29:03

在PHP数组中,键可以是int或string。其他每一种类型都需要转换为其中的一种。

当您执行$object[1.05]时,它在内部将该值转换为int,因此它执行$object[1],但是这种行为可能会误导您,因此从PHP8.1开始您就会收到警告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72294648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档