【问题标题】:PHP Convert String into Float/DoublePHP将字符串转换为浮点/双精度
【发布时间】:2013-05-12 18:21:45
【问题描述】:

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

这是我目前的代码:

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

有人吗?

已解决

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

【问题讨论】:

  • 适合我吗?
  • 这对我来说不行 :'(
  • 你尝试过 (int),还是真的需要浮点数?
  • (int) 在 32 位系统中会导致溢出。最大值为 2147483647。

标签: php string floating-point implicit-conversion


【解决方案1】:

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

来自documentation

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

也就是说$string首先被解释为INT,导致溢出($string2968789218超过了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中的函数?
【解决方案2】:

$float = floatval($string);

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

【讨论】:

    【解决方案3】:

    尝试使用

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

    【讨论】:

    • @tegaralaga 你检查结果怎么样? .00 看起来很可疑。
    • (double)(real) 在 PHP 中并不真正存在,因此投射到那些将投射到 (float) 这正是 OP 正在做的事情..
    • 在我的最后看起来还不错。你正在使用什么平台。阅读有关float 的更多信息。
    • 我的服务器有问题吗?我使用 RedHat OpenShift 的免费服务器 frodo-baggins.rhcloud.com/info.htm
    • 抱歉,我无法弄清楚是什么原因造成的。
    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多