ID: 46727 Updated by: [EMAIL PROTECTED] Reported By: grant at tattomedia dot com -Status: Open +Status: Bogus Bug Type: Unknown/Other Function Operating System: Linux PHP Version: 5.3CVS-2008-12-01 (snap) New Comment:
Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/en/language.types.float.php and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php Previous Comments: ------------------------------------------------------------------------ [2008-12-02 05:44:55] [EMAIL PROTECTED] This is because at the last iteration, the value for $val is (at least on my 5.2.6 test system; php 5.3.0 returns me the same value): 2.000000000000000444089209850062616169452667236328125 This is > 2, which means "<= 2" is false. If I dump the values of $val for each iteration: 0 0.1000000000000000055511151231257827021181583404541015625 0.200000000000000011102230246251565404236316680908203125 0.3000000000000000444089209850062616169452667236328125 0.40000000000000002220446049250313080847263336181640625 0.5 0.59999999999999997779553950749686919152736663818359375 0.6999999999999999555910790149937383830547332763671875 0.79999999999999993338661852249060757458209991455078125 0.899999999999999911182158029987476766109466552734375 0.99999999999999988897769753748434595763683319091796875 1.0999999999999998667732370449812151491641998291015625 1.1999999999999999555910790149937383830547332763671875 1.3000000000000000444089209850062616169452667236328125 1.4000000000000001332267629550187848508358001708984375 1.5000000000000002220446049250313080847263336181640625 1.6000000000000003108624468950438313186168670654296875 1.7000000000000003996802888650563545525074005126953125 1.8000000000000004884981308350688777863979339599609375 1.9000000000000005773159728050814010202884674072265625 Your "best" option would be to round($val, 1) before checking, but it might prove to be expensive. This is why it's always tricky to work with float values. ------------------------------------------------------------------------ [2008-12-01 21:11:29] grant at tattomedia dot com Description: ------------ My PHP version is PHP 5.2.5 (cli): This wasn't listed in the select. It seems that a for loop that deals with floats has bad logic when evaluating equivalence against another number (in my situation an int). Reproduce code: --------------- $values = array(); for ($val = 0; $val <= 2; $val = $val + .1) { $values[] = $val; } print_r($values); Expected result: ---------------- Array ( [0] => 0 [1] => 0.1 [2] => 0.2 [3] => 0.3 [4] => 0.4 [5] => 0.5 [6] => 0.6 [7] => 0.7 [8] => 0.8 [9] => 0.9 [10] => 1 [11] => 1.1 [12] => 1.2 [13] => 1.3 [14] => 1.4 [15] => 1.5 [16] => 1.6 [17] => 1.7 [18] => 1.8 [19] => 1.9 [20] => 2 ) Actual result: -------------- Array ( [0] => 0 [1] => 0.1 [2] => 0.2 [3] => 0.3 [4] => 0.4 [5] => 0.5 [6] => 0.6 [7] => 0.7 [8] => 0.8 [9] => 0.9 [10] => 1 [11] => 1.1 [12] => 1.2 [13] => 1.3 [14] => 1.4 [15] => 1.5 [16] => 1.6 [17] => 1.7 [18] => 1.8 [19] => 1.9 ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=46727&edit=1