PHP intval 与下限

问题描述 投票:0回答:6

floor()
intval()
有什么区别吗?虽然两者返回相同的结果,但性能方面有什么问题吗?两者哪个更快?如果我只想返回小数点的整个值,哪个是正确的 php 函数?

这里的目标是显示1999.99到1999,省略小数点,只返回整数。

$num = 1999.99;
$formattedNum = number_format($num)."<br>";
echo intval($num) . ' intval' . '<br />';
echo floor($num) . ' floor';
php floor money-format
6个回答
21
投票

这些函数给出带有负分数的不同结果。

echo floor(-0.1); // -1
echo intval(-0.1); // 0

6
投票

最快的方法是使用类型转换

(int)$num


5
投票

根据文档

floor()的返回值仍然是float类型,因为float的取值范围通常比integer更大。

然而,

Intval()
返回一个int。


0
投票
$v = 1999.99;
var_dump(
  intval($v),
  floor($v)
);

输出:

int(1999)
float(1999)

文档:

http://php.net/manual/en/function.intval.php
http://php.net/manual/en/function.floor.php


0
投票

这个答案还有更多内容。在 1999.99 的具体用例中,这两个函数将给出相同的数值结果。然而,正如其他人指出的那样,intval 返回为 int,而 Floor 返回为 float。我不清楚为什么地板会返回浮动状态,因为这是没有必要的。此外,正如其他人所指出的, intval 只是截掉小数,其中 Floor 返回“最低”整数,这会影响负数。

剩下的区别是 intval 将接受更多的变量类型,并尝试返回一个逻辑答案,其中 Floor 只需要整数或浮点数。例如,如果将 false 或 true 输入到 Floor 中,您将收到错误,但 intval 会将其分别转换为 0 和 1。


-1
投票
$ratio_x = (0.70/100);

$computation =  $ratio_x * 8000;

$noDeci = floor(($ratio_x * 8000)*1)/1;

$intval = intval(($ratio_x * 8000)*1)/1;

$noDeci_hc = floor((int)56*1)/1;

echo $computation."|".$noDeci."|".$noDeci_hc."|".$intval;

输出: 56|55|56|55

$noDeci 返回 55???

© www.soinside.com 2019 - 2024. All rights reserved.