搜索

首页  >  问答  >  正文

从 float(数字)到 int 的隐式转换会丢失精度

我在 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粉449281068P粉449281068405 天前890

全部回复(2)我来回复

  • P粉043295337

    P粉0432953372023-10-22 12:07:10

    雷雷

    回复
    0
  • P粉211600174

    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);

    回复
    0
  • 取消回复