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;
}