确实很基础,但Google并未给出答案。有没有一种方法可以截断数值而不四舍五入?
例如:
vars <- c(23.4567, 45.6795, 34.5670)
Run Code Online (Sandbox Code Playgroud)
我希望输出仅跳过最后两个有效数字,但不舍入输出。我想要的是:
vars <- c(23.45, 45.67, 34.56)
Run Code Online (Sandbox Code Playgroud)
但是,最常见的处理方法是四舍五入(当然,四舍五入也是有意义的:
round(vars, 2)
Run Code Online (Sandbox Code Playgroud)
[1] 23.46 45.68 34.57
signif(vars, digits=4)
Run Code Online (Sandbox Code Playgroud)
[1] 23.46 45.68 34.57
如果这里已经解决了这个问题,请指出正确的方向,但找不到R特有的...
您可以尝试 floor()
vars <- floor(vars*100)/100
Run Code Online (Sandbox Code Playgroud)
但是,此解决方案假定所有值都是正数,即floor()四舍五入到下一个较小的整数。如果存在负数,则此方法可能会产生不良结果:
> floor(-23.441*100)/100
#[1] -23.45
Run Code Online (Sandbox Code Playgroud)
因此,更通用的解决方案是使用trunc():
vars <- trunc(vars*100)/100
Run Code Online (Sandbox Code Playgroud)
这将删除前两位小数之后的任何数字,并且也适用于负数:
> trunc(-23.441*100)/100
#[1] -23.44
Run Code Online (Sandbox Code Playgroud)