小林です。

----- Original Message -----
送信者 : "Wakou Aoyama" <wakou / fsinet.or.jp>
件名 : [ruby-math:00324] Re: Float#ceil, Float#floor, Float#round


>
> あ、いえ、floor(-1.475) --> -2 ですが、それに相当する関数は Excel には
> 無いのでは、という事です。ROUND(-1.475,0) は -1 になるんですよね? 四
> 捨五入ですから。
>
数値が負ならROUNDUP(-1.475,0) ==> -2
でなんとか...

> > a.round_up と a.round_down は、a が正か負で a.ceil や a.floor と
> > まったく同じことになるので、わざわざ用意するのはどうでしょう?
>
> え? round_up は負でも ceil, floor とも違いますよ?
>
すいません、ちょっと私の表現がまずかったかも...
こう理解したのですが
  round_up(1.475) == ceil(1.475) == 2
  round_down(1.475) == floor(1.475) == 1
  round_up(-1.475) == floorl(-1.475) == -2
  round_down(-1.475) == ceil(-1.475) == -1
で、round_up も round_down も ceil と floor でカバーできる
ので、round_up と round_down は余計かなと考えたのです
が、どうでしょう?

>
> > a.round[(n)]
> >  n>=0 なら小数点以下 n+1 位を四捨五入する。
> >     (小数点以下を最大で n 桁にする)。
> >  n<0 なら小数点から左 n 桁目で四捨五入する。
> >     (整数で且つ、整数部 n 桁をゼロにする)。
> >
> > a.ceil[(n)]/floor[n]
> >  n>=0 なら小数点以下 n+1 位を ceil/floor する。
> >  n<0 なら小数点から左 n 桁目で ceil/floor する。
> >
> > これで、Excel がやっていることはカバーしていると思います。
> >
> > 引数 n が無いときは、今までどおり整数(Fixnum/Bignum)
> > が返る。引数 n があるときは Float が返る。
>
> 引数の扱いについてはこれで良いと思いますが、返り値は検討の余地がありそ
> うです。C の ceil, floor って、double を返すんですよね。という事は、引
> 数無しの場合も、Float を返すという事に統一でも良さそうですが、いかがで
> しょう?
>
> まあ、互換性は無くなりますが、1.7 以降の話ですし(いよいよ、あと半月で
> すか)、この程度の非互換は、検討されても良いように思います。
>
C に合わせれば、C プログラマーには親切かもしれませんが
「互換性」と天秤にかけた場合どうでしょう?
それと、[ruby-math:00302] の「整数を返すという伝統」という
のがちょっと気になります(伝統というのが何なのかはわかり
ませんが、私は「互換性」をとりたい気がします。)。

# Excel のCEILING(数値, 基準値)やFLOOR(数値, 基準値)って
# 8010万円は約一億円なのか、それとも 8000万円なのか?
# というようなときに利用するんでしょうかね?
#  CEILING(8010,2000) ==> 10000
#  CEILING(8010,1000) ==> 9000
#  FLOOR(8010,2000) ==> 8000

小林 茂雄
E-Mail: shigeo / tinyforest.gr.jp
Home Page: http://www.tinyforest.gr.jp