整数(64位)除法,无需使用intdiv()(在php7之前)

时间:2019-02-09 12:19:13

标签: php

测试是在64位系统上进行的!

php7有一个不错的功能:intdiv()。以下代码可以完美运行:

$number = 0x7fffffffffffffff;
$result = intdiv($number,62);

结果是148764065110560900(其余7),如预期。

但是如何在php <7(例如php5.3)中进行这种划分?

$number = 0x7fffffffffffffff;
$result = intval($number/62);

在这里,结果为148764065110560896,小于intdiv(...)的结果。原因很明显:$number/62是浮点运算。因此$number会转换为浮点数并失去精度(52位而不是64位)。因此结果四舍五入。

验证代码:

php -r '$a=0x7fffffffffffffff; $b=intdiv($a,62); $c=intval($a/62); printf("%d - %d = %d\n",$b,$c,$b-$c);'
// result: 148764065110560900 - 148764065110560896 = 4

我的问题: 有谁知道一个函数,该函数返回正确的整数值,例如0x7fffffffffffffff/62不用intdiv()吗?

基于Trincot答案的解决方案

if (!function_exists('intdiv'))
{
    function intdiv($a,$b)
    {
        $a = intval($a);
        $b = intval($b);
        return ( $a - $a % $b ) / $b;
    }
}

我将计划进行更多测试以验证此替换功能。

1 个答案:

答案 0 :(得分:1)

您可以使用protected void onActivityResult(int requestCode, final int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); if (ImagePicker.shouldHandle(requestCode, resultCode, data)) { UCrop.of(data.getData(),data.getData()) .start(this); } } 运算符来获取余数。然后,在减去其余部分后,进行除法:

%