如何在php中将浮点数转换为整数?

64
我想在php中将浮点值(例如:1.0000124668092E+14)转换为整数,最好的方法是什么?输出应为“100001246680920”。
6个回答

77

什么是转换?

  • 强制类型转换: (int) $floatintval($float)
  • 截断: floor($float) (向下)或 ceil($float) (向上)
  • 四舍五入: round($float) - 有附加的模式,请查看PHP_ROUND_HALF_... 常量

*: 强制类型转换有一定机率无法表示 float 值为 int(太大或太小),例如在您的情况中。

 

PHP_INT_MAX: 在此构建的 PHP 中支持的最大整数。通常为 int(2147483647)。

但您可以使用 BCMathGMP 扩展来处理这些大数字。(两者都已绑定,只需要启用这些扩展程序)


我可以将整数表示为字符串吗?例如:(string)"100001246680920" - sajith
2
使用四舍五入或截断,你可以得到一个浮点数。使用这些扩展,你可以像处理字符串一样处理它。 - pozs
3
请注意,floor()ceil()仍将作为float类型返回,因为根据文档,“浮点数的值范围通常比整数大”。 - Bananaapple

42

我只是想警告你:

>>> (int) (290.15 * 100);
=> 29014
>>> (int) round((290.15 * 100), 0);
=> 29015

3
在跟火炬跳了三天之后,你终于给我们带来了一些光明。你知道为什么 PHP 中的简单数学会失败吗? - S.M. Pat
2
不是这样的,似乎有一些数字被隐藏在内存中。 - William Desportes
7
如果您尝试执行var_dump(290.15*100),您会发现其内部表示为float(29014.999999999996)。因此,应用(int)将得到整数部分,即29014,而使用round()则会取最接近的整数值。 - Tama

17

使用round()

$float_val = 4.5;

echo round($float_val);

您还可以设置精度和舍入模式的参数,了解更多信息

更新(根据您的更新问题):

$float_val = 1.0000124668092E+14;
printf('%.0f', $float_val / 1E+14); //Output Rounds Of To 1000012466809201

输出得到1,而不是100001246680920。 - sajith
@sajith 你想让你的浮点数四舍五入,所以指数值会变成201而不是20。 - Mr. Alien
@sajith 哦天啊,我不明白为什么它不能工作,对我来说它完全可以。 - Mr. Alien
我明确指定了整数,但是我没有得到输出,只显示1作为输出。 - sajith
@sajith,你的方法不对。只需复制粘贴这两行代码,使用它,不要使用echo命令,然后查看结果即可。 - Mr. Alien
显示剩余4条评论

8

总有一个intval() - 不确定这是否是您正在寻找的...

示例:

$floatValue = 4.5;
echo intval($floatValue);    // Returns 4

它不会将值四舍五入为整数,但会剥离小数点和尾数,并返回小数点前的整数。
以下是相关文档:http://php.net/manual/en/function.intval.php

嗨,我已经做出了更改。这样是否足够? - JamLizzy101

7

试试这个

<?php
$float_val = 1.0000124668092E+14;
 echo intval($float_val);
?>

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接