Преобразование длинных строк в десятичные с более чем 13 разрядами

Эта функция преобразует массив, который может содержать строки, в числа, которые могут иметь или не иметь десятичную дробь.

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 или более знаков?

2

Решение

Он конвертируется в PHP-число с плавающей точкой, которое представляет собой 64-разрядное число с плавающей точкой IEEE. Вы, вероятно, ожидаете, что PHP использует 32-битное число IEEE с плавающей запятой для float и 64-разрядное число IEEE с плавающей запятой для double'. But, in PHPпоплавокanddouble` — это синонимы. (см. ссылку в комментарии Жоргонора).

Вы могли бы использовать PHP round функция для преобразования 64-битного числа в 6 или 7 десятичных точек для имитации эффекта, который вы, вероятно, ищете. Увидеть http://php.net/manual/en/function.round.php

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]