【问题标题】:How to convert float value to integer in php?如何在php中将浮点值转换为整数?
【发布时间】:2013-05-03 14:59:04
【问题描述】:

我想在php中将浮点值(例如:1.0000124668092E+14)转换为整数,php.output中最好的方法是“100001246680920”

【问题讨论】:

    标签: php floating-point int


    【解决方案1】:

    转换是什么意思?

    • 铸造*:(int) $floatintval($float)
    • 截断:floor($float)(向下)或ceil($float)(向上)
    • 四舍五入:round($float) - 有额外的modes,参见PHP_ROUND_HALF_... 常量

    *:强制转换有一些机会,浮点值不能用 int(太大或太小)表示,f.ex。在你的情况下。

    PHP_INT_MAX:此 PHP 版本支持的最大整数。通常是 int(2147483647)。

    但是,您可以使用BCMathGMP 扩展来处理这些大数字。 (两者都是有限制的,只需要开启这些扩展)

    【讨论】:

    • 所以我可以将整数表示为字符串,例如:(string)"100001246680920"
    • 通过舍入或截断,你会得到一个浮点数。使用这些扩展,您可以像处理字符串一样处理它。
    • 请注意floor()ceil() 仍将返回float 类型,因为根据文档,“float 的取值范围通常大于 integer 的取值范围”。跨度>
    【解决方案2】:

    我只想警告你:

    >>> (int) (290.15 * 100);
    => 29014
    >>> (int) round((290.15 * 100), 0);
    => 29015
    

    【讨论】:

    • 在与火炬共舞 3 天后,你给了我们一些启发,你知道为什么这么简单的数学在 PHP 中会失败吗?
    • 不是,好像有些数字隐藏在记忆里
    • 如果你尝试做 var_dump(290.15*100) 你可以看到内部表示是 float(29014.999999999996)。所以应用 (int) 取整数部分,即 29014,而使用 round() 取更接近的整数值。
    【解决方案3】:

    使用round()

    $float_val = 4.5;
    
    echo round($float_val);
    

    您还可以为 more info 设置精度和舍入模式的参数

    更新(根据您更新的问题):

    $float_val = 1.0000124668092E+14;
    printf('%.0f', $float_val / 1E+14); //Output Rounds Of To 1000012466809201
    

    【讨论】:

    • 输出得到 1,而不是 100001246680920
    • @sajith 你希望你的浮点数四舍五入,所以指数值将使它成为 201 而不是 20
    • @sajith 你的意思是最后一个数字吗?
    • @sajith 天哪,我不明白这怎么行,它完全适合我
    • 我清楚地提到了整数,但我没有得到输出,只显示 1 为 o/p
    【解决方案4】:

    总是有 intval() - 不确定这是否是你要找的......

    示例:-

    $floatValue = 4.5;
    echo intval($floatValue);    // Returns 4
    

    它不会将值四舍五入为整数,但会去除小数和尾随数字,并返回小数点前的整数。

    这里有一些文档:- http://php.net/manual/en/function.intval.php

    【讨论】:

    • 嗨,我进行了更改。这样就够了吗?
    【解决方案5】:

    使用roundfloorceil 方法将其四舍五入为最接近的整数,以及有限的intval()

    http://php.net/manual/en/function.round.php

    http://php.net/manual/en/function.ceil.php

    http://php.net/manual/en/function.floor.php

    【讨论】:

      【解决方案6】:

      试试这个

      <?php
      $float_val = 1.0000124668092E+14;
       echo intval($float_val);
      ?>
      

      【讨论】:

        猜你喜欢
        • 2022-10-29
        • 2014-04-28
        • 1970-01-01
        • 2013-08-23
        • 2011-05-21
        • 2010-10-10
        • 2012-10-07
        相关资源
        最近更新 更多