我希望以下声明中的 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
答案 0 :(得分:3)
我认为这是因为它高于int限制,请使用fmod(1364808202768,1000);
答案 1 :(得分:3)
这是因为数字超过了整数类型可以容纳的最大值。您可以检查整数是否太大,如下所示:
var_dump('1364808202768' > PHP_INT_MAX);
内置函数fmod
易于使用,它应该能够处理大数字:
echo fmod('1364808202768', 1000);
如果由于某种原因fmod
不可用,或者您经常处理大量数据,您还可以使用两种常见扩展程序之一(GMP和BC):< / 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);