首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Float到bigint

Float到bigint
EN

Stack Overflow用户
提问于 2016-08-19 06:14:39
回答 4查看 910关注 0票数 0

好的,我有这个浮点数:

代码语言:javascript
复制
$floatval = '1.05143617E+18';

它的等效整数是:-

代码语言:javascript
复制
1051436170000000000

使用php,我尝试将这个浮点数转换为所需的整数值。

这是我的尝试:

代码语言:javascript
复制
$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;
}

输出:-

代码语言:javascript
复制
953738112

不管我怎么尝试,输出结果都不符合要求。我哪里做错了?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-19 06:54:37

代码语言:javascript
复制
$floatval = (float) '1.05143617E+18';
$intval = (int) $floatval;
var_dump($intval);

输出:int(1051436170000000000)

票数 -1
EN

Stack Overflow用户

发布于 2016-08-19 06:34:14

试试这个

代码语言:javascript
复制
intval(floatval($floatval));
票数 0
EN

Stack Overflow用户

发布于 2016-08-19 07:48:20

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

代码语言:javascript
复制
function convert($floatval)
{
    $divided = explode('E+', $floatval);
    $base = $divided[0];
    $exp = $divided[1];
    $final = bcmul($base, bcpow('10', $exp));
    return $final;
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39028317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档