数値を丸める

まずは基本

 数値を丸める場合、round命令のを使うのが一般的です。
 OSAX命令なので少々遅い事、四捨五入の処理ができないことが不利な点です。

round 16.5 to nearest

 引数をto nearestにすると四捨五入ができそうですが、実際は多少違う動作をします(MacOS9.1からlike taught in schoolを指定して四捨五入可能)
 桁数を絡めた処理については「数値の桁数を揃える」の項を参照して下さい。

as integer

 実数を整数に変換したいのですから、一番最初に考えるのは、round命令よりも、むしろas演算子のほうかもしれません。
 ところが、

16.5 as integer

 と、書いて実行してみるとエラーが発生します。
 じつはas integerで変換できるのは、整数である実数、つまり小数点以下が0の実数だけなんです。
 以下のスクリプトではエラーとならず、変換できます。

16.0 as integer

 つまりasで変換する前に、小数点以下を0にする処理が必要なのですが、roundの返り値はそもそもintegerなので、変換の必要はなかったりします。

class of (round 16.5)

 もうひとつ理屈は良く判りませんが、以下のように{}で括ると変換できます。
 切り捨てのパターンは、「round n to nearest」と同じです。

{17.5} as integer

 文字列から直接変換する事もできます。

{"17.5"} as integer

div

 AppleScriptでは一般にOSAX命令よりも演算子や参照表現を利用したほうが高速に動作します。
 そこで、ソフトバンクの「AppleScriptリファレンス」の方にも書いてある、div演算子を使う方法を考えます。
 divは割算をして商を求める演算子で、余り(つまり小数点以下)は切り捨てられますから、小数点以下の切り捨てには1で割ればいいということになります。

16.5 div 1

 四捨五入を行いたい場合は、あらかじめ0.5を加えておけば、大丈夫です。

(16.5+0.5) div 1

 負の数の場合は切り捨て方が変わるので、if文で分岐しておくと良いでしょう。

roundNearest(16.5)

on roundNearest(n)
	if n < 0 then
		return (n - 0.5) div 1 -- 負の場合
	else
		return (n + 0.5) div 1 -- 正の場合
	end if
end roundNearest

 切り捨て方を変えるには、正の場合、負の場合、それぞれに加える数値を調節する事で可能になります。


2000-06-02 -2001-01-13