1

将值四舍五入为特定有效数字的最简单方法是什么?

类似于函数 signif() 的东西,但只执行向上舍入(而不是向下舍入)

例如:将 0.001145288 向上舍入到 1 个有效数字将产生 0.002

任何建议将不胜感激:)

干杯!

4

2 回答 2

5

此函数在一个有效数字的情况下提供所需的输出:

upround1 <- function(x) {
         if (isTRUE(all.equal(x,0))) return (x)
         decs <- 10^floor(log10(abs(x)))
         ceiling(x/decs)*decs
         }

例子:

upround1(0.001145288)
#[1] 0.002
upround1(0.0008145258)
#[1] 9e-04
upround1(11)
#[1] 20
upround1(-11)
#[1] -10
upround1(-0.023)
#[1] -0.02
于 2016-06-02T06:09:59.747 回答
3

我创建了一个将格式更改为科学格式的函数,将字符串按“e”拆分并使用该信息来限制数字。

my_ceiling <- function(x){
  num_string <- format(x, scientific=TRUE)

  n <- strsplit(num_string, "e")
  n1 <- sapply(n, function(x) as.numeric(x[1]))
  n2 <- sapply(n, function(x) as.numeric(x[2]))

  ceiling(n1) * 10^(n2)
}    

my_ceiling(0.001145288)
# [1] 0.002    

my_ceiling(0.0974343)
# [1] 0.1    

my_ceiling(0)
# [1] 0    

set.seed(1)
x <- runif(10, 0.001, 0.01)
my_ceiling(x)
# [1] 0.004 0.005 0.007 0.010 0.003 0.010 0.010 0.007
# [9] 0.007 0.002
于 2016-06-02T06:22:37.067 回答