我正在尝试对任何实数应用顺序舍入函数,以便满足以下条件:“报告的数字应不超过两位小数且不超过两位有效数字”。
例如:
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)
最佳答案
您可以将函数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"
关于r - 使用 round() 后跟 signif() 进行连续舍入后的尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24928656/