1

这是我想要反序列化这个字符串的字符串。

$string3 = 'a:3:{i:0;a:2:{s:5:"value";d:4.0999999999999996;s:7:"players";a:2:{i:6;i:6;i:7;i:7;}}i:1;a:2:{s:5:"value";d:10.899999999999999;s:7:"players";a:1:{i:7;i:7;}}i:2;a:2:{s:5:"value";d:1.7763568394002505E-15;s:7:"players";N;}}';

它给出了以下结果

Array
(
[0] => Array
    (
        [value] => 4.1 // this value converted to 4.1 original was see in the string it was 4.0999999999999996
        [players] => Array
            (
                [6] => 6
                [7] => 7
            )

    )

[1] => Array
    (
        [value] => 10.9 // this value converted to 10.9 original was see in the string it was 10.899999999999999
        [players] => Array
            (
                [7] => 7
            )

    )

[2] => Array
    (
        [value] => 1.7763568394003E-15
        [players] => 
    )

)

它将数组值转换为 4.1 和 10.9 等。我希望原始值不转换。

4

1 回答 1

1

计算机很难精确处理浮点数。无需赘述,PHP 只是为浮点值的最大数量设置了一个值。这是在precision配置属性中设置的。它可能设置为 14,因此每个具有 14 个或更多浮点数的浮点数都将被舍入。

因此,您需要做的是增加precisionphp.ini 中的值。或者用ini_set('precision', 20).

这应该够了吧。

于 2013-03-13T11:25:18.037 回答