#29732 [Fbk->Opn]: Mod operator(%) doesn't work with negative integers

From: Date: Sat, 21 Aug 2004 15:06:34 +0000
Subject: #29732 [Fbk->Opn]: Mod operator(%) doesn't work with negative integers
References: 1  Groups: php.doc 
Request: Send a blank email to phpdoc+get-969363384@lists.php.net to get a copy of this message
ID: 29732 User updated by: robinmessag at hotmail dot com Reported By: robinmessag at hotmail dot com -Status: Feedback +Status: Open -Bug Type: Feature/Change Request +Bug Type: Documentation problem Operating System: Windows 98SE PHP Version: Irrelevant New Comment: I have since found Bug number #22527 which has some proper details on the workings of the % operator and the reasons behind it returning negative numbers. I have changed the category to documentation problem. Could I suggest changed to the documentation to indicate % gives the remainder from division, not the modulus which should always positive and also a note that this can give negative results. I'm sorry this sounds like a petty thing but I have been caught out more than once by this behaviour which is at best an undocumented quirk. Previous Comments: ------------------------------------------------------------------------ [2004-08-18 14:47:53] derick@php.net What was the previous bug number? ------------------------------------------------------------------------ [2004-08-18 14:39:25] robinmessag at hotmail dot com Description: ------------ When doing the modulus of a negative number, PHP returns a bogus value. However, it is clearly doing the modulus, simply returning a negative answer. In order to work around, one can add the modulus and mod again, but this is not a satisfactory solution IMHO. This bug has been reported before and dismissed, however, modulus on negative numbers is correct and useful and this should be fixed or at least documented. Reproduce code: --------------- $hour=4; $timedifference1=-6; $timedifference2=-30; $realtime=($hour+$timedifference1)%24; $realtime2=($hour+$timedifference2)%24; $realtime3=($hour+$timedifference2)%24; $realtime3=(24+$realtime3)%24; echo("The time is:$realtime or maybe $realtime2<BR>"); echo("The correct time is:$realtime3<BR>"); Expected result: ---------------- The time is:22 or maybe 22 The correct time is:22 Actual result: -------------- The time is:-2 or maybe -2 The correct time is:22 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=29732&edit=1

« previous php.doc (#969363384) next »