【发布时间】:2016-10-01 01:47:30
【问题描述】:
我有numeric这样的一个:
a <- -1.542045
我想将它们向下舍入(或将abs 向上舍入)到小数点后两位数。
signif(a,3) 会将其四舍五入并给我 1.54 作为结果,但对于此示例,我想要的结果是 -1.55。
有什么想法吗?
【问题讨论】:
标签: r significant-digits
我有numeric这样的一个:
a <- -1.542045
我想将它们向下舍入(或将abs 向上舍入)到小数点后两位数。
signif(a,3) 会将其四舍五入并给我 1.54 作为结果,但对于此示例,我想要的结果是 -1.55。
有什么想法吗?
【问题讨论】:
标签: r significant-digits
我想你正在寻找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.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
>
【讨论】:
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
【讨论】: