我有一组字符串(以字节为大小),这些字符串是从文件中读取的。假设其中一个字符串是2968789218,但是当我将其转换为浮点数时,它变成了2.00。
到目前为止,这是我的代码:
$string = "2968789218";
$float = (float)$string;
//$float = floatval($string);
//the result is same
// result 2.00
有人吗?
已解决
问题实际上是编码问题。当我改变文件编码时,现在它就没问题了 :D
我有一组字符串(以字节为大小),这些字符串是从文件中读取的。假设其中一个字符串是2968789218,但是当我将其转换为浮点数时,它变成了2.00。
到目前为止,这是我的代码:
$string = "2968789218";
$float = (float)$string;
//$float = floatval($string);
//the result is same
// result 2.00
有人吗?
问题实际上是编码问题。当我改变文件编码时,现在它就没问题了 :D
令人惊讶的是,没有被接受的答案。该问题仅存在于32位PHP中。
根据文档,
如果字符串不包含字符“.”、“e”或“E”,并且其数字值适合整数类型限制(由PHP_INT_MAX定义),则该字符串将被视为整数。在所有其他情况下,它将被视为浮点数。
换句话说,首先将$string解释为INT,这会导致溢出($string值2968789218超过了32位PHP的最大值(PHP_INT_MAX
),该值为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
。
floatval
结果存储在变量中,而不是直接在echo中调用函数吗? - ADTC标签
。$string = "2968789218";
$float = (double)$string;
(double)
和(real)
并不存在,因此将数据转换成这些类型会转换成(float)
,这就是提问者正在做的事情。 - adeneo $string = "2968789218";
$float = $string * 1.0;
echo $float;
但对我来说,所有之前的答案都有效(在http://writecodeonline.com/php/中尝试一下) 也许问题出在你的服务器上?
(int)
会导致溢出。最大值为2147483647。 - Raptor