我在 php 8.1 之前曾经使用过这个公式
<?php $number = 0; echo log10(abs($number)) / 3 | 0; echo PHP_EOL; $number = 100; echo log10(abs($number)) / 3 | 0; echo PHP_EOL; $number = 1100; echo log10(abs($number)) / 3 | 0; echo PHP_EOL; $number = 10000000; echo log10(abs($number)) / 3 | 0; ?>
它工作得很好,但现在升级后我不断收到这些错误
Deprecated: Implicit conversion from float -INF to int loses precision Deprecated: Implicit conversion from float 0.6666666666666666 to int loses precision Deprecated: Implicit conversion from float 1.0137975617194084 to int loses precision Deprecated: Implicit conversion from float 2.3333333333333335 to int loses precision
我无法从 8.1 文档中找到或理解为什么现在会发生这种情况
P粉2116001742023-10-22 10:41:26
当您通过 |
运算符执行按位 OR 运算时,您将获得到整数的隐式转换。这是一种……奇怪的……转换为整数的方式。要避免警告,只需显式转换即可。
隐式:
echo log10(abs($number)) / 3 | 0;
显式通过函数:
echo intval(log10(abs($number)) / 3);
或者通过演员表:
echo (int) (log10(abs($number)) / 3);