Round up from .5

前端 未结 7 796
一个人的身影
一个人的身影 2020-11-22 11:41

Yes I know why we always round to the nearest even number if we are in the exact middle (i.e. 2.5 becomes 2) of two numbers. But when I want to evaluate data for some peopl

7条回答
  •  臣服心动
    2020-11-22 11:55

    This is not my own function, and unfortunately, I can't find where I got it at the moment (originally found as an anonymous comment at the Statistically Significant blog), but it should help with what you need.

    round2 = function(x, n) {
      posneg = sign(x)
      z = abs(x)*10^n
      z = z + 0.5 + sqrt(.Machine$double.eps)
      z = trunc(z)
      z = z/10^n
      z*posneg
    }
    

    x is the object you want to round, and n is the number of digits you are rounding to.

    An Example

    x = c(1.85, 1.54, 1.65, 1.85, 1.84)
    round(x, 1)
    # [1] 1.8 1.5 1.6 1.8 1.8
    round2(x, 1)
    # [1] 1.9 1.5 1.7 1.9 1.8
    

    (Thanks @Gregor for the addition of + sqrt(.Machine$double.eps).)

提交回复
热议问题