Bug #54248 [Opn->Bgs]: disappearing array key [987]

From: Date: Mon, 14 Mar 2011 16:16:36 +0000
Subject: Bug #54248 [Opn->Bgs]: disappearing array key [987]
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-159463@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=54248&edit=1

 ID:                 54248
 Updated by:         rasmus@php.net
 Reported by:        rodoeted at yahoo dot com
 Summary:            disappearing array key [987]
-Status:             Open
+Status:             Bogus
 Type:               Bug
 Package:            Output Control
 Operating System:   centos 5.5
 PHP Version:        5.3.5
 Block user comment: N
 Private report:     N

 New Comment:

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://www.floating-point-gui.de/

Thank you for your interest in PHP.

.


Previous Comments:
------------------------------------------------------------------------
[2011-03-14 15:48:30] rodoeted at yahoo dot com

Description:
------------
the key 987 disappears

Test script:
---------------
$ceva=array(
	array('amount'=>9.89),
	array('amount'=>9.88),
	array('amount'=>9.87),
	array('amount'=>9.86),
	array('amount'=>9.85),
	array('amount'=>9.84),
	array('amount'=>9.83),
	array('amount'=>9.82),
	array('amount'=>8.86),
	array('amount'=>8.85),
	array('amount'=>8.84),
);

function print_a($array) {
	echo "<pre>";
	print_r($array);
	echo "</pre>";
}

print_a($ceva);


$usable=array();

foreach($ceva as $b){
	$x=$b['amount']*100;
	$usable[$x]=$b['amount'];
	var_dump($usable[$x]);
}

var_dump($usable);

Expected result:
----------------
<pre>Array
(
    [0] => Array
        (
            [amount] => 9.89
        )

    [1] => Array
        (
            [amount] => 9.88
        )

    [2] => Array
        (
            [amount] => 9.87
        )

    [3] => Array
        (
            [amount] => 9.86
        )

    [4] => Array
        (
            [amount] => 9.85
        )

    [5] => Array
        (
            [amount] => 9.84
        )

    [6] => Array
        (
            [amount] => 9.83
        )

    [7] => Array
        (
            [amount] => 9.82
        )

    [8] => Array
        (
            [amount] => 8.86
        )

    [9] => Array
        (
            [amount] => 8.85
        )

    [10] => Array
        (
            [amount] => 8.84
        )

)
</pre>float(9.89)
float(9.88)
float(9.87)
float(9.86)
float(9.85)
float(9.84)
float(9.83)
float(9.82)
float(8.86)
float(8.85)
float(8.84)
array(10) {
  [989]=>
  float(9.89)
  [988]=>
  float(9.88)
  [987]=>
  float(9.87)
  [986]=>
  float(9.86)
  [985]=>
  float(9.85)
  [984]=>
  float(9.84)
  [983]=>
  float(9.83)
  [982]=>
  float(9.82)
  [886]=>
  float(8.86)
  [885]=>
  float(8.85)
  [884]=>
  float(8.84)
}


Actual result:
--------------
<pre>Array
(
    [0] => Array
        (
            [amount] => 9.89
        )

    [1] => Array
        (
            [amount] => 9.88
        )

    [2] => Array
        (
            [amount] => 9.87
        )

    [3] => Array
        (
            [amount] => 9.86
        )

    [4] => Array
        (
            [amount] => 9.85
        )

    [5] => Array
        (
            [amount] => 9.84
        )

    [6] => Array
        (
            [amount] => 9.83
        )

    [7] => Array
        (
            [amount] => 9.82
        )

    [8] => Array
        (
            [amount] => 8.86
        )

    [9] => Array
        (
            [amount] => 8.85
        )

    [10] => Array
        (
            [amount] => 8.84
        )

)
</pre>float(9.89)
float(9.88)
float(9.87)
float(9.86)
float(9.85)
float(9.84)
float(9.83)
float(9.82)
float(8.86)
float(8.85)
float(8.84)
array(10) {
  [989]=>
  float(9.89)
  [988]=>
  float(9.88)
  [986]=>
  float(9.86)
  [985]=>
  float(9.85)
  [984]=>
  float(9.84)
  [983]=>
  float(9.83)
  [982]=>
  float(9.82)
  [886]=>
  float(8.86)
  [885]=>
  float(8.85)
  [884]=>
  float(8.84)
}



------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=54248&edit=1


Thread (2 messages)

« previous php.bugs (#159463) next »