PHP将字符串转换为Float / Double

时间:2013-05-12 18:21:45

标签: 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

任何?

解决

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

4 个答案:

答案 0 :(得分:18)

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

来自documentation

  

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

换句话说,$string首先被解释为INT,这会导致溢出($string 2968789218 超过最大值(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

答案 1 :(得分:9)

$ float = floatval($ string);

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

答案 2 :(得分:5)

尝试使用

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

答案 3 :(得分:0)

如果函数floatval不起作用,你可以尝试这样做:

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

但对我来说,之前的所有答案都有效(在http://writecodeonline.com/php/中尝试) 也许问题在你的服务器上?