PHP将字符串转换为浮点/双精度
我有一个字符串列表(大小以字节为单位),我从文件中读取这些字符串。假设其中一个字符串是2968789218,但当我将其转换为float时,它变成了2.00 这是我目前的代码: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
$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中的函数?