Php 浮点数
好的,我有一个浮点数:-Php 浮点数,php,Php,好的,我有一个浮点数:- $floatval = '1.05143617E+18'; 它的等效整数是:- 1051436170000000000 使用php,我试图将这个浮点数转换为所需的整数值 以下是我的尝试:- $floatval = '1.05143617E+18'; var_dump(convert($floatval)); function convert($floatval) { $divided = explode('+', $floatval); $firs
$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
无论我尝试什么,输出都没有按要求进行。我哪里出错了?(int)(float)$floatval代码>起作用。试试这个
intval(floatval($floatval));
输出:int(1051436170000000000)
似乎您正在处理整数溢出,可能是因为您在Windows上运行PHP,并且您的系统不支持64位整数。通过使用扩展中的函数进行计算,可以避免此问题。如果您在Windows上运行,PHP将内置对bcmath的支持,如文档中所述。使用bcmath,您的convert
函数可以如下实现:
function convert($floatval)
{
$divided = explode('E+', $floatval);
$base = $divided[0];
$exp = $divided[1];
$final = bcmul($base, bcpow('10', $exp));
return $final;
}
在另一个没有整数溢出问题的系统上,其他基于cast的解决方案之一应该可以工作。不确定我为什么被否决。如果您想让您的特定解决方案发挥作用,请在E而不是+上爆炸。无论如何,这两种解决方案都不会超过INT_MAX!您在32位系统上吗?var_dump((int)(float)'1.05143617E+18')
on给出了int(1051436170000000000)
@RobertPuerco您的系统中有什么?我感觉你在运行32位,其中INT_MAX低于目前大多数服务器运行的64位系统。输出是:-INT 953738240
出于兴趣,“-0”实现了什么?@jedifans实际上你是对的。强制转换为INT不需要0。0将用于强制变量进入INT状态。你是对的。你的操作系统和PHP版本是什么?
function convert($floatval)
{
$divided = explode('E+', $floatval);
$base = $divided[0];
$exp = $divided[1];
$final = bcmul($base, bcpow('10', $exp));
return $final;
}