2013-04-01 28 views
1

我期望從以下聲明。但它回聲-360。爲什麼?模數運算給出負值在php

echo 1364808202768%1000; 

UPDATE:

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

其工作正確我已經測試。 –

+0

什麼是PHP版本什麼系統? http://3v4l.org/figtV – deceze

+0

它提供'768' http://codepad.viper-7.com/I0GaM6 –

回答

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

我認爲,那是因爲它上面的INT限制,使用fmod(1364808202768,1000);

2

你應該閱讀有關數據類型及其範圍。使用這個: -

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