向下舍入一个数字

Round down a numeric

我有 numeric 个像这样的:

a <- -1.542045

我想将它们向下舍入(或向上舍入 abs)到小数点后 2 位数字。 signif(a,3) 会将其四舍五入并得到 1.54,但对于此示例,我想要的结果是 -1.55.

有什么想法吗?

你对问题的理解有误。如果该值在-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
> 

我想你正在寻找 floor(a * 100) / 100

快速测试

a <- c(-1.542045, 1.542045)
floor(a * 100) / 100
# [1] -1.55  1.54

我刚刚注意到您在 7 小时前更改了问题。那么我的回答并不是完全按照你的意愿去做(正如我假设 "rounding down" 你总是想向 -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

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