我numeric
就像这样:
a <- -1.542045
我希望将它们向下舍入(或将abs
向上舍入)到小数点后的2位数。
signif(a,3)
会将其向下舍入并给出1.54作为结果,但对于此示例,我想要的结果是-1.55
。
有什么想法吗?
答案 0 :(得分:13)
我认为您正在寻找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 :(得分:2)
你误解了这个问题。如果值在-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
>
答案 2 :(得分:1)
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