向下舍入一个数字
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
我有 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