とりあえず半歩

学んだことを1日1個、簡単なことでも良いから記録していきたい。

四捨五入をする

目標

Rで四捨五入を行う。

動機

round()関数だと最近接偶数への丸めとなってしまうため。

課題

ここでは負の数の四捨五入を『0.5を足して負への無限大へ丸める』ことにする。

例)
-1.4 -> -1
-1.5 -> -1
-1.6 -> -2
-2.1 -> -2

実施

環境

  • Windows 7 Home Premium 64bit
  • R 3.2.2
  • RStudio 0.99.489

作業

次の関数を四捨五入の関数として定義する.

結果

> x <- seq(0.5, 9.5, by=1)
> x
 [1] 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5
> round(x)
 [1]  0  2  2  4  4  6  6  8  8 10
> round.off(x)
 [1]  1  2  3  4  5  6  7  8  9 10
> 
> y <- seq(-9.5, -0.5, by=1)
> y
 [1] -9.5 -8.5 -7.5 -6.5 -5.5 -4.5 -3.5 -2.5 -1.5 -0.5
> round(y)
 [1] -10  -8  -8  -6  -6  -4  -4  -2  -2   0
> round.off(y)
 [1] -9 -8 -7 -6 -5 -4 -3 -2 -1  0
> 
> round(2.5)
[1] 2
> round.off(2.5)
[1] 3
> 
> round(0.145, 2)
[1] 0.14
> round.off(0.145, 2)
[1] 0.15
> 
> round(-0.145, 2)
[1] -0.14
> round.off(-0.145, 2)
[1] -0.14
> 

説明

4行目で四捨五入する桁まで一旦整数化することで、浮動小数点誤差を無視する。

4行目で得られる値は絶対値をとっていることから必ず正数になる。それに元の数の正負を反映し、下の参考サイト通りに計算したのが5行目のfloor関数。10の累乗で割り算をしているのは、値を元の桁に戻すため。

Rounding - Wikipedia, the free encyclopedia

もっと楽ちんな方法があればご教授ください。

参考