2013-06-29 32 views
2

我知道PHP函数floor(),但这不起作用,我希望它的负数。如何在PHP中截断小数?

这是地板是如何工作的

floor(1234.567); // 1234 
floor(-1234.567); // -1235 

这就是我想要

truncate(1234.567); // 1234 
truncate(-1234.567); // -1234 

是否有一个PHP函数将返回-1234?

我知道我能做到这一点,但我希望有一个单一的内置功能

$num = -1234.567; 
echo $num >= 0 ? floor($num) : ceil($num); 
+0

我不认为有一个...为什么要打扰那几个字符?您的产品线的意图非常明确。 – Yogu

+2

'number_format($ num,0,'','');'? – Ohgodwhy

+0

@Ohgodwhy我只是尝试了number_format的方式,它实际上返回-1235像'floor()'函数一样。奇怪! – chrislondon

回答

7

intval

intval(1234.567); 
intval(-1234.567); 
+1

我喜欢这个,因为'intval'是我真正想要完成的。 – chrislondon

2

您也可以使用类型转换(无需使用功能) ,

(int) 1234.567; // 1234 
(int) -1234.567; // -1234 

http://php.net/manual/en/language.types.type-juggling.php

您可以看到intval(int)之间的差异从here

+0

这不是他想要的。在他的例子中,这两行应该是1234。 –

+1

@Rich Bradshaw Sry ..这是我的错。我刚刚复制了第一个代码块,忘记编辑注释部分。现场演示http://codepad.org/7gBgAHBK –

+0

我希望我可以标记两个答案是正确的。我喜欢'intval()'和'(int)' – chrislondon

1

你可以使用intval(number);但如果你的数字大于2147483648(和你的机器/ OS是x64)的所有大个子将被截断到2147483648所以,你可以使用

if($number < 0) 
$res = round($number); 
else 
$res = floor($number); 

echo $res; 
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(...)

能否(应该)也会喜欢错误/边界检查。

另一种方法将作为一个字符串对待数字,找到小数点,并根据所需的精度在小数点后的适当位置做一个子字符串。相对而言,这不会很快。