函数参数的PHP类型声明中的错误

bug in php type declaration of of function parameter

提问人:gray_15 提问时间:6/8/2022 更新时间:6/8/2022 访问量:40

问:

案例:库使用如下代码:

function setUnitPrice(?int $unitPrice)
    {
        return $unitPrice;
    }

当我这样做时:

$var1 = 0.58;
$var1 = $var1 * 100;
echo setUnitPrice($var1);

它以 PHP 7.2 的形式显示为 57 在 PHP 8 中,它显示警告 已弃用:从 float 57.99999999999999 到 int 的隐式转换会失去精度

我以前从来不需要在 php 中对浮点数进行四舍五入,有人可以解释一下吗? 要解决这个问题,需要有 intaval(round($var 1)),但这没有任何意义

PHP 函数 转换

评论

0赞 iainn 6/8/2022
我不确定你认为错误在哪里 - PHP 8.1 刚刚添加了一个警告,即隐式类型转换将导致精度损失(参见 3v4l.org/ttWuv)。就像你说的,结果已经是 5.7。如果你有一个需要 int 的函数(并且不想失去精度),则需要在使用任何浮点变量之前对其进行舍入。

答:

0赞 svgta 6/8/2022 #1

$var 1 已被取消为浮动。如果你做一个var_dump,你会看到。 但你可以做到

echo setUnitPrice((integer)$var1);

评论

0赞 gray_15 6/9/2022
这是行不通的,还是少了一个
0赞 Dago Dassi Ange 6/8/2022 #2
$var1 = 0.58;
$var1 = $var1 * 100;
echo setUnitPrice(round($var1));

这是我的主张

评论

0赞 gray_15 6/9/2022
这行得通。但我真的觉得这类问题不属于php,而更多的是javascript世界的问题。我从事php编程已有15年了,以前从未遇到过这种问题。