基于小数点前位数的四舍五入规则

问题描述 投票:1回答:1

说我们有以下数值向量:

y=c(0.111,1.11,11.1,111.1)

我希望将其舍入如下:

0.11,1.11,11.1,111  

此规则很简单:我总共要三位数!但是,如果数字很大(例如1111或11111),则保留所有数字,但不保留小数。

当然,必须有一个更简单的解决方案?:

lapply(y,function(x){
  ifelse(nchar(as.integer(x))<1,round(x,digits=3),
         ifelse(nchar(as.integer(x))==1,round(x,digits=2),
                ifelse(nchar(as.integer(x))==2,round(x,digits=1),
                       ifelse(nchar(as.integer(x))>2,round(x,digits=0)
                       ))))
}
)
r rounding digits
1个回答
0
投票

这项工作吗?

y <- c(0.111,1.11,11.1,111.1,1111,11111)
(ry <- gsub("0+$","",round(y*100)/100))
## [1] "0.11"  "1.11"  "11.1"  "111.1" "1111"  "11111"
as.numeric(ry)
## [1]     0.11     1.11    11.10   111.10  1111.00 11111.00

我通常不喜欢转换为字符的解决方案,但是它似乎可以完成您想要的...(请注意,此rounds可以根据需要进行,但是数字值的打印会重新包含零值:cat(ry,"\n")将按原样打印数字)

© www.soinside.com 2019 - 2024. All rights reserved.