向下舍入数字

时间:2016-10-01 01:47:31

标签: r significant-digits

numeric就像这样:

a <- -1.542045

我希望将它们向下舍入(或将abs向上舍入)到小数点后的2位数。 signif(a,3)会将其向下舍入并给出1.54作为结果,但对于此示例,我想要的结果是-1.55

有什么想法吗?

3 个答案:

答案 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