|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-04-11 09:38 UTC] alberty at neptunelabs dot de
Hi, the follow code results -0, <?php $a=ceil((1/16)-1); echo $a; ?> maybe, this is a convertion problem with float types. also, why the ceil() command results a floating point number and not an integer? It makes sense when the ceil command accept a precision like round()... Regards, Steve PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Dec 10 17:00:01 2025 UTC |
Hi derick, here is the proof of my statement. try this code: <?php echo "<tt>(machine code representation)<br><br>"; // correct result $b1=0; $p=pack('f',$b1); echo " $b1 = "; for ($l=0,$o1='';$l<strlen($p);$l++){ $o1.=sprintf('%02X',ord($p[$l])); } echo $o1.'h'; echo '<hr size=1>'; //wrong result $a=-0.1; $b2=round($a); $p=pack('f',$b2); echo "$b2 = "; for ($l=0,$o2='';$l<strlen($p);$l++){ $o2.=sprintf('%02X',ord($p[$l])); } echo $o2.'h'; echo "<hr>the question is, is $b1 == $b2<br>"; echo "php mean:<br><font color=#000088>"; if ($b1==$b2) echo "yes, this is true.<br>"; else echo "no, this is false.<br>"; echo "</font>but $o1 != $o2<br>"; echo "and also $o2 != 0"; echo "</tt>"; ?> The big problem with this behavior is, if you using round() or ceil() to output results of mathematical function, you can't be sure if the result what you expected or not. This can have fatal consequences for programs they output e.g. statitics in text files and other programs interpret the php results wrong! This is not a trivial problem!