这个函数将一个可以包含字符串的数组转换为可以包含小数也可以不包含小数的数字。
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