it-roy-ru.com

PHP Конвертировать строку в плавающий/двойной

У меня есть список строк (размер в байтах), я читаю их из файла. Допустим, одной из строк является 2968789218, но когда я конвертирую ее в число с плавающей точкой, она становится равной 2,00.

Это мой код до сих пор:

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

Кто-нибудь?

Решаемая

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

16
Bias Tegaralaga

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

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

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

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

17
Raptor

$ float = floatval ($ string);

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

9
Muya Enzo

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

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

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

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

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

0
daarksim