1

我期望从以下语句中得到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
4

3 回答 3

3

我认为那是因为它超出了 int 限制,请使用fmod(1364808202768,1000);

于 2013-04-01T09:35:26.983 回答
3

这是因为数量超过了整数类型可以容纳的最大值。您可以像这样检查整数是否太大:

var_dump('1364808202768' > PHP_INT_MAX);

内置函数fmod好用,应该可以处理大数:

echo fmod('1364808202768', 1000);

如果由于某种原因不可用,或者如果您经常处理大量数字,您也可以使用两个常见扩展(GMPBC )之一: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);
于 2013-04-01T09:57:32.400 回答
2

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

$num = 1364808202768;
echo fmod($num,1000);
于 2013-04-01T09:37:23.657 回答