将数字向下取整

13

我有像这样的数字

a <- -1.542045

我希望将它们向下舍入(或向上舍入abs)到小数点后2位。

signif(a,3)将其向下舍入并给出1.54作为结果,但是对于这个示例,我想要的结果是-1.55

有什么办法吗?

3个回答

30

我认为你正在寻找 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

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

可以使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接