22

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

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

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

任何人?

解决了

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

4

4 回答 4

21

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

文档中,

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

换句话说,$string它首先被解释为 INT,这会导致溢出($string2968789218PHP_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

于 2014-06-03T15:13:13.390 回答
9

$float = floatval($string);

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

于 2014-03-10T08:27:03.610 回答
5

尝试使用

$string = "2968789218";
$float = (double)$string;
于 2013-05-12T18:24:23.693 回答
0

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

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

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

于 2013-05-13T03:08:21.090 回答