将长字符串转换为超过 13 位的小数

Converting long strings to decimals with more than 13 places

此函数正在将可能包含字符串的数组转换为可能有也可能没有小数的数字。

function toNumberArray(array $stringArray) {
    print_r ($stringArray);
    echo "<hr>";
    $n = [];
    for ($i = 0; $i < count($stringArray); $i++) {
        $n[] = settype ( $stringArray[$i],"float");
        $x = (float) $stringArray[$i];
        echo $x;
        echo "<br>";
    }
    return $n;
}

print_r (toNumberArray(["1.123456789012345","2.2000000000000002","3.2999999999999998"]));

结果:

数组([0] => 1.123456789012345 [1] => 2.2000000000000002 [2] => 3.2999999999999998 )


1.1234567890123

2.2

3.3

数组 ( [0] => 1 [1] => 1 [2] => 1 )

问题:

为什么 settype 不将字符串转换为浮点数?

小数点后14位及以上如何换算?

它正在转换为 PHP 浮点数,这是一个 64 位 IEEE 浮点数。您可能期望 PHP 对 float 使用 32 位 IEEE 浮点数,对 double'. But, in PHPfloatanddouble 使用 64 位 IEEE 浮点数同义词。 (请参阅 jorgonor 评论中的 link)。

您可以使用 PHP 的 round 函数将 64 位数字转换为 6 位或 7 位小数,以模拟您可能正在寻找的效果。参见 http://php.net/manual/en/function.round.php