php的float返回类型声明是否应该覆盖函数或方法的输出?[副本]

voase2hg  于 2023-04-28  发布在  PHP
关注(0)|答案(2)|浏览(140)

此问题已在此处有答案

PHP type hinting is being ignored, no TypeError exception is thrown(1个答案)
10小时前关闭。
偶然发现了这个,以前没见过。基本上使用php的返回类型声明覆盖了浮点数上输出的精度。目前使用PHP 7。4、在这个特殊的时刻
这个应用程序特别具有非常高的浮点精度,设置为20。
只是行为的一个例子。

<?php 
function clean_number($input) : float {

    return number_format($input,2);

}

$number = 55.36643455;

echo clean_number($number);

我的期望是输出:55.37
实际输出为:55.369999999999997442
我在php文档中没有看到任何关于这方面的内容。这是否是预期的行为,因为它会中断可能返回不同精度的浮点值的函数。现在删除类型声明修复了它,但由于现在使用得更频繁,似乎它可能会有问题。

beq87vna

beq87vna1#

number_format()返回一个字符串,按照规范进行格式化。您的函数要求返回float,因此PHP将字符串强制返回为浮点数,从而丢失精度。
如果需要维护格式化版本,请在返回时保留string

<?php 
function clean_number($input) : string {

    return number_format($input,2);

}

$number = 55.36643455;

echo clean_number($number); // 55.37

参见https://3v4l.org/sHcbT

k97glaaz

k97glaaz2#

不可以,PHP的float返回类型声明不应该覆盖函数或方法的输出。
PHP中的返回类型声明允许您指定函数或方法应返回的值的类型。如果一个函数或方法声明了一个返回类型float,这意味着它应该返回一个浮点数值。
但是,返回类型声明并不影响函数或方法的实际输出。函数或方法的输出由其实现决定,而不是由其返回类型声明决定。
例如,考虑以下PHP函数:

function divide($a, $b): float {
    return $a / $b;
}

这个函数声明了一个float的返回类型,这意味着它应该返回一个浮点数。但是,如果调用参数为10和2的函数,它将输出5,这是一个整数。这是因为函数的输出是由它的实现(在本例中是除法运算)决定的,而不是它的返回类型声明。
因此,总而言之,PHP float返回类型声明不会覆盖函数或方法的输出。它们只是指示函数或方法应该返回的值的类型。

相关问题