此问题已在此处有答案:
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文档中没有看到任何关于这方面的内容。这是否是预期的行为,因为它会中断可能返回不同精度的浮点值的函数。现在删除类型声明修复了它,但由于现在使用得更频繁,似乎它可能会有问题。
2条答案
按热度按时间beq87vna1#
number_format()
返回一个字符串,按照规范进行格式化。您的函数要求返回float
,因此PHP将字符串强制返回为浮点数,从而丢失精度。如果需要维护格式化版本,请在返回时保留
string
。即
参见https://3v4l.org/sHcbT
k97glaaz2#
不可以,PHP的float返回类型声明不应该覆盖函数或方法的输出。
PHP中的返回类型声明允许您指定函数或方法应返回的值的类型。如果一个函数或方法声明了一个返回类型float,这意味着它应该返回一个浮点数值。
但是,返回类型声明并不影响函数或方法的实际输出。函数或方法的输出由其实现决定,而不是由其返回类型声明决定。
例如,考虑以下PHP函数:
这个函数声明了一个float的返回类型,这意味着它应该返回一个浮点数。但是,如果调用参数为10和2的函数,它将输出5,这是一个整数。这是因为函数的输出是由它的实现(在本例中是除法运算)决定的,而不是它的返回类型声明。
因此,总而言之,PHP float返回类型声明不会覆盖函数或方法的输出。它们只是指示函数或方法应该返回的值的类型。