漂浮到bigint

时间:2016-08-18 22:14:39

标签: php

好的,所以我有这个浮点数: -

$floatval = '1.05143617E+18';

它的等效整数是: -

1051436170000000000

使用php,我试图将此浮点数转换为所需的整数值。

这是我的尝试: -

$floatval = '1.05143617E+18';
var_dump(convert($floatval));

function convert($floatval)
{
    $divided = explode('+', $floatval);
    $first = floatval($divided[0]);
    $second = intval($divided[1]);
    $final = intval($first * pow(10, $second));
    return $final;
}

输出: -

953738112

无论我尝试什么,输出都不是按要求提供的。我在哪里做错了?

4 个答案:

答案 0 :(得分:0)

试试这个

intval(floatval($floatval));

答案 1 :(得分:0)

看来你正在处理整数溢出,可能是因为你在Windows上运行PHP而你的系统不支持64位整数。您可以使用bcmath扩展名中的函数进行计算,从而避免此问题。如果您在Windows上运行,PHP将具有内置的bcmath支持,如文档here中所述。使用bcmath,您的convert函数可以像这样实现:

function convert($floatval)
{
    $divided = explode('E+', $floatval);
    $base = $divided[0];
    $exp = $divided[1];
    $final = bcmul($base, bcpow('10', $exp));
    return $final;
}

在没有整数溢出问题的另一个系统上,其他一个基于强制转换的解决方案应该可以工作。

答案 2 :(得分:-1)

$floatval = (float) '1.05143617E+18';
$intval = (int) $floatval;
var_dump($intval);

输出:int(1051436170000000000)

答案 3 :(得分:-2)

(int)(float)$floatval;可以解决问题。