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

PHP将字符串转换为浮点/双精度,php,string,floating-point,implicit-conversion,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尝试使用 $strin

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

这是我目前的代码:

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

解决

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

尝试使用

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

如果floatval函数不起作用,您可以尝试执行以下操作:

    $string = "2968789218";
    $float = $string * 1.0;
    echo $float;
但对我来说,前面所有的答案都有效(试一下) 可能问题出在您的服务器上?

$float=floatval($string)


参考:

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

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

换句话说,首先将
$string
解释为INT,这会导致溢出(
$string
2968789218超过32位PHP的最大值(
PHP\u INT\u MAX
),即2147483647),然后通过
(float)
floatval()
计算为float

因此,解决方案是:

$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

对我来说很好?对我来说不好:'(您试过(int)了吗,还是您真的需要浮点?
(int)
在32位系统中会导致溢出。最大值为2147483647。@tegaralaga您如何检查结果?
.00
看起来可疑。
(双精度)
(实型)
在PHP中并不存在,因此对这些值的强制转换将强制转换为
(浮点型)
这正是OP正在做的事情..我这边看起来不错。您使用的是什么平台。了解更多信息。我的服务器有问题吗?我使用的是RedHat OpenShift的免费服务器,很抱歉,但我无法找出原因。还不完全清楚。是否有必要将
floatval
结果存储在而不是直接调用echo中的函数?