【问题标题】:Round down a numeric向下舍入一个数字
【发布时间】:2016-10-01 01:47:30
【问题描述】:

我有numeric这样的一个:

a <- -1.542045

我想将它们向下舍入(或将abs 向上舍入)到小数点后两位数。 signif(a,3) 会将其四舍五入并给我 1.54 作为结果,但对于此示例,我想要的结果是 -1.55

有什么想法吗?

【问题讨论】:

    标签: r significant-digits


    【解决方案1】:

    我想你正在寻找floor(a * 100) / 100

    快速测试

    a <- c(-1.542045, 1.542045)
    floor(a * 100) / 100
    # [1] -1.55  1.54
    

    我刚刚注意到您在 7 小时前更改了您的问题。那么我的回答并没有完全按照您的意愿行事(正如我假设通过“四舍五入”您总是想向-Inf四舍五入)。但是我已经在我的答案的第一个版本中讨论了这个问题。现在我要将那些相关的内容复制到这里。

    • 使用sign(a) * ceiling(abs(a) * 100) / 100,您可以将数据向Inf 舍入以获得正值,将数据舍入到-Inf 以获得负值。
    • 使用 sign(a) * floor(abs(a) * 100) / 100,您可以将正值和负值都舍入到 0。

    快速测试

    a <- c(-1.542045, 1.542045)
    
    sign(a) * ceiling(abs(a) * 100) / 100
    # [1] -1.55  1.55
    
    sign(a) * floor(abs(a) * 100) / 100
    # [1] -1.54  1.54
    

    【讨论】:

      【解决方案2】:

      你误解了这个问题。如果该值在 -1.542045 中,则始终为。

      现在您可以将其打印到小数点后两位或获得两位小数的字符:

      > print(a, digits=3)
      [1] -1.54
      > format(a, digits=3)
      [1] "-1.54"
      > 
      

      如果您真的想要创建一个新的表示,您可以:

      > b <- trunc(a*1e2)*1e-2
      > b
      [1] -1.54
      > 
      

      一个更好的方法可能是

      > b <- round(a, digits=2)
      > b
      [1] -1.54
      > 
      

      【讨论】:

        【解决方案3】:

        ceiling()abs()sign() 的组合可用于对数字的绝对值进行四舍五入,无论其符号如何。可以通过以下方式获得两位小数的舍入:

        ceiling(abs(a)*100)/100*sign(a)
        

        例子:

        a <- c(-1.542045, 1.542045)
        ceiling(abs(a)*100)/100*sign(a)
        #[1] -1.55  1.55
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多