好的,所以我有这个浮点数: -
$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
无论我尝试什么,输出都不是按要求提供的。我在哪里做错了?
答案 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;
可以解决问题。