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

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

Это мой код:

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

Кто угодно?

решаемая

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

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

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

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

Другими словами, $string сначала интерпретируется как INT, которая вызывает переполнение (значение $string 2968789218 превышает максимальное значение ( PHP_INT_MAX ) 32-битного PHP, которое равно 2147483647. ), А затем вычисляется как float by (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 .

$ float = floatval ($ string);

Ссылка: http://www.php.net/floatval

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

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

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

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

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