我知道PHP函数floor()
,但这不符合我想要的负数。
这就是楼层的工作方式
floor( 1234.567); // 1234
floor(-1234.567); // -1235
这就是我想要的
truncate( 1234.567); // 1234
truncate(-1234.567); // -1234
是否有返回-1234的PHP函数?
我知道我可以这样做,但我希望有一个内置功能
$num = -1234.567;
echo $num >= 0 ? floor($num) : ceil($num);
答案 0 :(得分:14)
intval(1234.567);
intval(-1234.567);
答案 1 :(得分:3)
你也可以使用类型转换(不需要使用函数),
(int) 1234.567; // 1234
(int) -1234.567; // -1234
http://php.net/manual/en/language.types.type-juggling.php
您可以看到来自here的intval
和(int)
类型转换之间的区别。
答案 2 :(得分:1)
你可以使用intval(数字);但如果您的数字大于2147483648(并且您的机器/操作系统是x64),所有大个子将被截断为2147483648.所以您可以使用
if($number < 0 )
$res = round($number);
else
$res = floor($number);
echo $res;
答案 3 :(得分:1)
另一个黑客使用前缀 ~~
:
echo ~~1234.567; // 1234
echo ~~-1234.567; // 1234
更简单、更快捷
答案 4 :(得分:0)
您可以将小数点移动到所需的位置,intval,然后转回:
function truncate($number, $precision = 0) {
// warning: precision is limited by the size of the int type
$shift = pow(10, $precision);
return intval($number * $shift)/$shift;
}
请注意有关int大小的警告 - 这是因为$number
可能会乘以一个大数字($shift
),这可能会导致结果数太大存储为整数类型。可能转换为浮点可能更好。
您可以使用$base
参数,并将其发送到intval(...)
。
可能(应该)也可以使用错误/边界检查。
另一种方法是将数字视为字符串,找到小数点,并根据所需的精度在小数点后的适当位置处执行子字符串。相对来说,这不会很快。
答案 5 :(得分:0)
截断特定精度的浮点数
echo bcdiv(2.56789, 1, 1); // 2.5
echo bcdiv(2.56789, 1, 3); // 2.567
echo bcdiv(-2.56789, 1, 1); // -2.5
echo bcdiv(-2.56789, 1, 3); // -2.567
此方法可解决round()
函数的问题。