我有像这样的数字
:
a <- -1.542045
我希望将它们向下舍入(或向上舍入abs
)到小数点后2位。
signif(a,3)
将其向下舍入并给出1.54作为结果,但是对于这个示例,我想要的结果是-1.55
。
有什么办法吗?
我有像这样的数字
:
a <- -1.542045
我希望将它们向下舍入(或向上舍入abs
)到小数点后2位。
signif(a,3)
将其向下舍入并给出1.54作为结果,但是对于这个示例,我想要的结果是-1.55
。
有什么办法吗?
我认为你正在寻找 floor(a * 100) / 100
。
快速测试
a <- c(-1.542045, 1.542045)
floor(a * 100) / 100
# [1] -1.55 1.54
我刚刚注意到您在7小时前修改了问题。那么我的答案就不能完全符合您的要求(因为我假设您希望通过“向下取整”始终向-Inf
取整)。但是我已经在我的答案的第一个版本中讨论过这个问题。现在我将把相关内容复制到这里。
sign(a) * ceiling(abs(a) * 100) / 100
,您可以将数据向Inf
取整为正值,并将负值向-Inf
取整。sign(a) * floor(abs(a) * 100) / 100
,您可以将正数和负数都向0取整。快速测试
a <- c(-1.542045, 1.542045)
sign(a) * ceiling(abs(a) * 100) / 100
# [1] -1.55 1.55
sign(a) * floor(abs(a) * 100) / 100
# [1] -1.54 1.54
你误解了问题。如果值是-1.542045,它将始终保持不变。
现在你可以将其打印为两位小数或获取一个包含两个小数的字符:
> print(a, digits=3)
[1] -1.54
> format(a, digits=3)
[1] "-1.54"
>
如果您真的想创建一个新的表现形式,您可以:
> b <- trunc(a*1e2)*1e-2
> b
[1] -1.54
>
> b <- round(a, digits=2)
> b
[1] -1.54
>
可以使用ceiling()
、abs()
和sign()
的组合来将数字的绝对值向上舍入,而不考虑其符号。可以通过以下方式获得两位小数的四舍五入:
ceiling(abs(a)*100)/100*sign(a)
例子:
a <- c(-1.542045, 1.542045)
ceiling(abs(a)*100)/100*sign(a)
#[1] -1.55 1.55