模数运算在php中给出负值

模数运算在php中给出负值,php,modulus,Php,Modulus,我期望从下面的声明中得到768。但它的回声是-360。为什么? 更新: #: php -v PHP 5.3.2-1ubuntu4.17 with Suhosin-Patch (cli) (built: Jun 19 2012 01:35:33) Copyright (c) 1997-2009 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies with Xdebug v2.0.5, Co

我期望从下面的声明中得到768。但它的回声是-360。为什么?

更新:

#: php -v
PHP 5.3.2-1ubuntu4.17 with Suhosin-Patch (cli) (built: Jun 19 2012 01:35:33) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans

#: php -r 'echo 1364808202768%1000;'
-360

#: uname -a
Linux tripura 2.6.32-37-generic #81-Ubuntu SMP Fri Dec 2 20:35:14 UTC 2011 i686 GNU/Linux

我认为这是因为它高于int限制,请使用fmod13648082027681000

我认为这是因为它高于int限制,请使用fmod13648082027681000

您应该了解数据类型及其范围。使用以下命令:-

$num = 1364808202768;
echo fmod($num,1000);

您应该了解数据类型及其范围。使用以下命令:-

$num = 1364808202768;
echo fmod($num,1000);

这是因为该数字超过了整数类型可以容纳的最大值。您可以检查整数是否过大,如下所示:

var_dump('1364808202768' > PHP_INT_MAX);
内置功能fmod易于使用,应能处理大数字:

echo fmod('1364808202768', 1000);
您还可以使用两种常见扩展中的一种,如果出于任何原因,fmod不可用,或者如果您经常使用大量数据:

// Using the GMP extension
$big = gmp_init('1364808202768', 10);
$val = gmp_strval(gmp_mod($big, 1000));
echo $val;

// Using the BC extension
echo bcmod('1364808202768', 1000);

这是因为该数字超过了整数类型可以容纳的最大值。您可以检查整数是否过大,如下所示:

var_dump('1364808202768' > PHP_INT_MAX);
内置功能fmod易于使用,应能处理大数字:

echo fmod('1364808202768', 1000);
您还可以使用两种常见扩展中的一种,如果出于任何原因,fmod不可用,或者如果您经常使用大量数据:

// Using the GMP extension
$big = gmp_init('1364808202768', 10);
$val = gmp_strval(gmp_mod($big, 1000));
echo $val;

// Using the BC extension
echo bcmod('1364808202768', 1000);

我已经测试过了,它工作正常。在什么系统上使用什么PHP版本?它给出了768 PHP5.4.7、XAMPP和Windows:我也得到了-360。值得注意的是,当处理大数时,最值得注意的是使用模运算符,结果取决于您的CPU体系结构。因此,如果您必须执行复杂的数学运算,运行一台像样的64位机器将对您有利。下面是一些示例代码-您可以比较它在x86和x86_64机器上的输出:我已经测试过它的工作是否正确。在什么系统上的哪个PHP版本上?它给出了768 PHP5.4.7、XAMPP和Windows:我也得到了-360。值得注意的是,当处理大数时,最值得注意的是使用模运算符,结果取决于您的CPU体系结构。因此,如果您必须执行复杂的数学运算,运行一台像样的64位机器将对您有利。以下是一些示例代码-您可以比较其在x86和x86_64机器上的输出: