PHP将字符串转换为Float/Double

Bia*_*aga 18 php string floating-point implicit-conversion

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

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

$string = "2968789218";
$float = (float)$string;
//$float = floatval($string);
//the result is same
// result 2.00
Run Code Online (Sandbox Code Playgroud)

任何人?

解决了

问题实际上是编码.我改变文件编码现在没问题:D

Rap*_*tor 18

令人惊讶的是,没有公认的答案.该问题仅存在于32位PHP中.

文档中,

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

换句话说,$string首先将其解释为INT,这会导致溢出($string2968789218超过PHP_INT_MAX32位PHP 的最大值(),即2147483647.),然后通过(float)或计算浮点数floatval().

因此,解决方案是:

$string = "2968789218";
echo 'Original: ' . floatval($string) . PHP_EOL;
$string.= ".0";
$float = floatval($string);
echo 'Corrected: ' . $float . PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

哪个输出:

Original: 2.00
Corrected: 2968789218
Run Code Online (Sandbox Code Playgroud)

要检查您的PHP是32位还是64位,您可以:

echo PHP_INT_MAX;
Run Code Online (Sandbox Code Playgroud)

如果您的PHP是64位,它将打印出来9223372036854775807,否则将打印出来2147483647.


小智 9

$ float = floatval($ string);

参考:http://www.php.net/floatval


小智 5

尝试使用

$string = "2968789218";
$float = (double)$string;
Run Code Online (Sandbox Code Playgroud)

  • `(double)`和`(real)`确实不存在于PHP中,所以强制转换为`(float)`这正是OP正在做的事情. (4认同)