我正在尝试对任何实数应用顺序舍入函数,以便满足以下条件:"数字应报告不超过两位小数,且不超过两位有效数字"。
例如:
0.0236应报告为0.02
0.236应报告为0.24
2.36应报告为2.4
23.6应报告为24
236应报告为240
似乎只要在使用round
和signif
进行舍入后存在尾随零,就会省略这些零(例如0.90023变为0.9而不是0.90)。我尝试过以下代码:
my_round <- function(x1) {
x2 <- formatC(x1, digits=2, format="f", drop0trailing=FALSE)
x2 <- as.numeric(x2)
x3 <- formatC(x2, digits=2, format="fg", flag="#", drop0trailing=FALSE)
x3 <- as.numeric(x3)
print(x3)
}
这适用于除195之外的任何数字(整数部分中超过两个有效数字),它仍然是195而不是四舍五入到200.
感谢您就此主题提供的任何帮助 (R v3.1.0,2014-04-10)
答案 0 :(得分:1)
您可以将功能sprintf
与讨论过的问题here结合起来。
ceil.ten <- function(x)
if (x > 100) ceiling(x/10)*10 else x
sprintf("%.2f", ceil.ten(0.0236))
# [1] "0.02"
sprintf("%.2f", ceil.ten(0.236))
# [1] "0.24"
sprintf("%.2f", ceil.ten(2.36))
# [1] "2.36"
sprintf("%.2f", ceil.ten(23.6))
# [1] "23.60"
sprintf("%.2f", ceil.ten(236))
# [1] "240.00"
sprintf("%.2f", ceil.ten(195))
# [1] "200.00"
答案 1 :(得分:1)
试试这个:
## Install the prettyprint package
install.packages("devtools")
devtools::install_github("prettyprint/prettyprint")
##
library(prettyprint)
x = c(0.0236, 0.236, 2.36, 23.6, 236, 0.90023, 195)
pp(x, digits = 2)
输出:
0.02 0.24 2.4 24 240 0.90 200
答案 2 :(得分:0)
对于这个特定问题,似乎有一种可能的解决方案是:
my_round <- function(x1) {
x2 <- formatC(x1, digits=2, format="f", drop0trailing=FALSE)
x2 <- as.numeric(x2)
if(x2<100) {
x3 <- formatC(x2, digits=2, format="fg", flag="#")
x3 <- as.numeric(x3)
}
else {
x3 <- signif(x2, digits=2)
}
print(x3)
}