Подтвердить что ты не робот

PHP Преобразование строки в Float/Double

У меня есть список строк (размер в байтах), я читаю их из файла. Пусть говорят, что одна из строк - 2968789218, но когда я конвертирую ее в float, она становится 2.00.

Это мой код:

$string = "2968789218";
$float = (float)$string;
//$float = floatval($string);
//the result is same
// result 2.00

Кто-нибудь?

решаемые

Проблема была на самом деле в кодировке. Теперь отлично, когда я изменяю кодировку файла: D

4b9b3361

Ответ 1

Удивительно, что ответа нет. Проблема существует только в 32-битном PHP.

В документации,

Если строка не содержит символов ".", "e" или "E", а числовое значение вписывается в ограничения типа целочисленного типа (как определено в PHP_INT_MAX), строка будет оцениваться как целое число. Во всех остальных случаях он будет оцениваться как float.

Другими словами, $string сначала интерпретируется как INT, вызывающий переполнение (значение $string 2968789218 превышает максимальное значение (PHP_INT_MAX) 32-битного PHP, что 2147483647.), затем оценивается как float на (float) или floatval().

Таким образом, решение:

$string = "2968789218";
echo 'Original: ' . floatval($string) . PHP_EOL;
$string.= ".0";
$float = floatval($string);
echo 'Corrected: ' . $float . PHP_EOL;

который выводит:

Original: 2.00
Corrected: 2968789218

Чтобы проверить, является ли ваш PHP 32-разрядным или 64-разрядным, вы можете:

echo PHP_INT_MAX;

Если ваш PHP-64-разрядный, он распечатает 9223372036854775807, иначе он распечатает 2147483647.

Ответ 3

Попробуйте использовать

$string = "2968789218";
$float = (double)$string;

Ответ 4

Если функция floatval не работает, вы можете попробовать сделать это:

    $string = "2968789218";
    $float = $string * 1.0;
    echo $float;

Но для меня работал весь предыдущий ответ (попробуйте в http://writecodeonline.com/php/) Возможно, проблема на вашем сервере?