首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从浮点数1.0833333333333333到int的隐式转换失去了精度-PHP-8.1

从浮点数1.0833333333333333到int的隐式转换失去了精度-PHP-8.1
EN

Stack Overflow用户
提问于 2022-04-05 13:10:24
回答 1查看 1.8K关注 0票数 0

我正在将项目升级到PHP8.1版本。这两个函数都面临警告,导致性能低下。第一项职能:

代码语言:javascript
复制
   /**
     * @param $a
     * @param $b
     * @return float
     */
    public static function div($a, $b)
    {
        return (int) ~~($a / $b);
    }

第二项职能:

代码语言:javascript
复制
   /**
         * @param $a
         * @param $b
         * @return mixed
         */
        public static function mod($a, $b)
        {
            return (int) $a - ~~($a / $b) * $b;
        }

我的警告:

代码语言:javascript
复制
Implicit conversion from float 1.0833333333333333 to int loses precision

该样本使用了以下功能:

代码语言:javascript
复制
 public static function d2g($jdn)
    {
        $j = 4 * $jdn + 139361631;
        $j += self::div(self::div(4 * $jdn + 183187720, 146097) * 3, 4) * 4 - 3908;
        $i = self::div(self::mod($j, 1461), 4) * 5 + 308;

        $gd = self::div(self::mod($i, 153), 5) + 1;
        $gm = self::mod(self::div($i, 153), 12) + 1;
        $gy = self::div($j, 1461) - 100100 + self::div(8 - $gm, 6);

        return [$gy, $gm, $gd];
    }
EN

回答 1

Stack Overflow用户

发布于 2022-04-05 13:29:33

警告非常清楚:将浮点数转换为整数会导致精度下降。由于此转换是通过应用~运算符隐式进行的,因此您将得到以下警告。

我建议对第一个函数使用本机intdiv函数,对第二个函数使用%操作符。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71752396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档