Edit report at https://bugs.php.net/bug.php?id=44659&edit=1
ID: 44659 Updated by: ras...@php.net Reported by: spartacus4+php at gmail dot com Summary: Adding decimals to math calc where it should not Status: Not a bug Type: Bug Package: Math related Operating System: Mac OSX PHP Version: 5.2.5 Block user comment: N Private report: N New Comment: @junkmail <?php $balance = 80343.05; $trbalance = 38390.74; echo $balance.'<br>'; echo $trbalance.'<br>'; echo $openbalance = $balance - $trbalance.'<br>'; outputs: 80343.05 38390.74 41952.31 Previous Comments: ------------------------------------------------------------------------ [2012-05-11 21:05:35] junkmail at expresscourier dot info <? echo $balance.'<br>'; echo $trbalance.'<br>'; echo $openbalance = $balance - $trbalance.'<br>'; ?> _______________________________________________________________ Output: 80343.05 38390.74 41952.26 __________________________________________________ So 80343.05 - 38390.74 = 41952.26 (!!!! should be 41952.31) lost 0.05 in simple math. ------------------------------------------------------------------------ [2008-04-07 13:45:22] scott...@php.net Floating point values have a limited precision. Hence a value might not have the same string representation after any processing. That also includes writing a floating point value in your script and directly printing it without any mathematical operations. If you would like to know more about "floats" and what IEEE 754 is, read this: http://docs.sun.com/source/806-3568/ncg_goldberg.html Thank you for your interest in PHP. ------------------------------------------------------------------------ [2008-04-07 13:13:41] spartacus4+php at gmail dot com Sorry, I through together that sample code really quick. Here's a simplified sample code snippet that produces the same results: $amount = 49.83; $out=array(); for($i=0; $i<1000; $i++){ if(!isset($out['test'])) $out['test']=0; $out['test'] += $amount; echo $out['test'].' + '.$amount.'<br>'; } echo '<pre>'; print_r($out); echo '</pre>'; // Messes up at value: 31243.41 ------------------------------------------------------------------------ [2008-04-07 13:04:12] spartacus4+php at gmail dot com Description: ------------ It appears PHP is adding incorrect decimal points. The included test script shows this happening at value: 31243.41. When I add the two values: 31243.41 + 49.83 it produces the correct sum. But if I use it in an array that += the amount, it adds an incorrect decimal value after several hundred add ons. It appears to be a possible memory flaw when summing array values. FYI: I'm actually using PHP version 5.2.3 - it was not an option in the drop down. Reproduce code: --------------- $amount = '49.83'; $out=array(); $type='test';; for($i=0; $i<1000; $i++){ if(!isset($out[$test][$result])) $out[$test][$result]=0; $out[$test][$result] += $amount; echo $out[$test][$result].' + '.$amount.'<br>'; } echo '<pre>'; print_r($out); echo '</pre>'; Expected result: ---------------- Either an explanation of why the decimal points are added only when using an array value OR potentially a bug fix within new version fixing this flaw. Actual result: -------------- Actual results are output within included code. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=44659&edit=1