将长字符串转换为超过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"]));

结果:

Array ([0] => 1.123456789012345 [1] => 2.2000000000000002 [2] => 3.29999999999999999998)


1.1234567890123

2.2

3.3

Array ([0] => 1 [1] => 1 [2] => 1)

问题:

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

如何转换,如果有14个或更多的地方在小数点后?

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

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