青山です。

On Tue, 13 Jun 2000 13:45:43 +0900,
"Shigeo Kobayashi" <shigeo / tinyforest.gr.jp> wrote:

> ところが、負の引数もあるんですね、これが(以下 Excel のヘルプより)..
> # 小数点の左まで考慮している

なんと。まあ、しかし、round_up, round_down に分離すれば、それも可能で
すね。

> Excel のように n<0 も必要なんでしょうか??

以前、1.1E2, 11.1E2, 111.1E2 のような例を書きましたが、これは指数表記
が可能な場合です。それが出来ない場合には、110, 1110, 11110 で、整数部
の下から2桁目がまるめの対象となります。

という事で、指数形式で扱う仕組みが無い場合には必要です。なるほど。
Excel にはあったんですね。さすが。

> なんと! Excel はちがうんですね、
> 
> FLOOR(数値, 基準値)
>   数値を挟む基準値の倍数のうち、0 に近い方の値を返します。

> CEILING ってのもあるんですが同様です。なんだか、とってもメンドウ????
> # きっと銀行系の方は理解できるのでしょう。

これはちょっと変かも。floor(-1.n) --> -1 って事ですよね。

C の場合: floor(x): x より大きくない最大の整数
floor を英和では: (価格・賃金などの)最低限度 (⇔→ceiling)

英和での最低限度という言葉からも、floor(-1.n) --> -2 という、C の動き
があっているように思われます。

Excel のこの動きは、round_down ですよね。round_down(-1.n) --> -1

Excel って、floor, ceil をそっくり round_down, round_up と同じ動きにし
ているのかも。という事は、floor, ceil を切捨て、切上げとして使っている
という事ですかね。

まあ、確かに銀行系ではそうなのでしょうけれど、素直に round_up, down を
使うべきのような。逆に言えば、無限小に近い方の値を返す関数が無いという
事ですよね。そういうのが必要な場合、Excel ではどうするのやら。

という事で、ここまでをまとめると、ceil, floor とは別に round,
round_up, round_down を用意する。ceil, floor は無限小を基準のままとし、
round 系は 0 を基準とする。引数は数値で、正では小数部、負では整数部の
桁数を指定する。という感じでいかがでしょう?


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>