【问题标题】:Trailing zeros after sequential rounding with round() followed by signif()使用 round() 后跟 signif() 顺序舍入后尾随零
【发布时间】:2014-09-15 17:02:33
【问题描述】:

我正在尝试对任何实数应用顺序舍入函数,以便满足以下条件:“报告的数字应不超过两位小数,不超过两位有效数字”。

例如:
0.0236 应报告为 0.02
0.236 应报告为 0.24
2.36 应报告为 2.4
23.6 应报告为 24
236 应该报告为 240

似乎只要在使用roundsignif 进行四舍五入后出现尾随零,它们就会被省略(例如,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)

【问题讨论】:

    标签: r rounding trailing significant-digits


    【解决方案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"
    

    【讨论】:

      【解决方案2】:

      试试这个:

      ## 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
      

      【讨论】:

        【解决方案3】:

        似乎这个特定问题的一种可能的解决方案是:

            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)
             }
        

        【讨论】:

          猜你喜欢
          • 2021-05-24
          • 2021-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多