加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:34:39 所属栏目:PHP教程 来源:网络整理
导读:我有字符串列表(以字节为单位),我从文件中读取.让我们说一个字符串是2968789218,但是当我把它转换成float它变成2.00. 这是我的代码到目前为止 $string = "2968789218";$float = (float)$string;//$float = floatval($string);//the result is same// result
我有字符串列表(以字节为单位),我从文件中读取.让我们说一个字符串是2968789218,但是当我把它转换成float它变成2.00.

这是我的代码到目前为止

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

任何人?

解决了

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

令人惊讶的是没有接受的答案.这个问题只存在于32位PHP中.

从documentation,

If the string does not contain any of the characters ‘.’,‘e’,or ‘E’ and the numeric value fits into integer type limits (as defined by PHP_INT_MAX),the string will be evaluated as an integer. In all other cases it will be evaluated as a float.

换句话说,$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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读