Эта функция преобразует массив, который может содержать строки, в числа, которые могут иметь или не иметь десятичную дробь.
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 использует 32-битное число IEEE с плавающей запятой для float
и 64-разрядное число IEEE с плавающей запятой для double'. But, in PHP
поплавокand
double` — это синонимы. (см. ссылку в комментарии Жоргонора).
Вы могли бы использовать PHP round
функция для преобразования 64-битного числа в 6 или 7 десятичных точек для имитации эффекта, который вы, вероятно, ищете. Увидеть http://php.net/manual/en/function.round.php
Других решений пока нет …