模数运算在php中给出负值

时间:2013-04-01 09:31:41

标签: php modulus

我希望以下声明中的 768 。但它回声 -360 。为什么呢?

echo 1364808202768%1000;

更新:

#: 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

3 个答案:

答案 0 :(得分:3)

我认为这是因为它高于int限制,请使用fmod(1364808202768,1000);

答案 1 :(得分:3)

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

var_dump('1364808202768' > PHP_INT_MAX);

内置函数fmod易于使用,它应该能够处理大数字:

echo fmod('1364808202768', 1000);

如果由于某种原因fmod不可用,或者您经常处理大量数据,您还可以使用两种常见扩展程序之一(GMPBC):< / p>

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

答案 2 :(得分:2)

您应该阅读有关数据类型及其范围的信息。使用此: -

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