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

コンピューターが float を正確に処理するのは困難です。詳細は省きますが、PHP は単純に浮動小数点値の最大値を設定しています。これはprecisionconfig プロパティで設定されます。おそらく 14 に設定されているため、14 個以上の浮動小数点数を持つ浮動小数点数はすべて丸められます。

precisionしたがって、php.iniの値を増やす必要があります。または で変更しini_set('precision', 20)ます。

これでうまくいくはずです。

于 2013-03-13T11:25:18.037 に答える