PHP 将字符串转换为浮点数/双精度

我有字符串列表(大小以字节为单位),我从文件中读取它们。假设其中一个字符串2968789218,但是当我将其转换为float时,它变成了2.00。

这是我到目前为止的代码:

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

任何人?

解决

问题实际上是编码。现在当我更改文件编码时:D


答案 1

令人惊讶的是,没有被接受的答案。此问题仅存在于 32 位 PHP 中。

文档中

如果字符串不包含任何字符“.”、“e”或“E”,并且数值符合整数类型限制(由 PHP_INT_MAX 定义),则该字符串将作为整数进行计算。在所有其他情况下,它将作为浮点数进行评估。

换句话说,首先被解释为INT,这会导致溢出(值2968789218超过32位PHP的最大值(),这是2147483647.),然后计算为浮点数或。$string$stringPHP_INT_MAX(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位,它将打印出来,否则它将打印出来。92233720368547758072147483647


答案 2

$float = floatval($string);

编号 : http://www.php.net/floatval


推荐