数値を丸める場合、round命令のを使うのが一般的です。
OSAX命令なので少々遅い事、四捨五入の処理ができないことが不利な点です。
round 16.5 to nearest
引数をto nearestにすると四捨五入ができそうですが、実際は多少違う動作をします(MacOS9.1からlike taught in schoolを指定して四捨五入可能)
桁数を絡めた処理については「数値の桁数を揃える」の項を参照して下さい。
実数を整数に変換したいのですから、一番最初に考えるのは、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
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
切り捨て方を変えるには、正の場合、負の場合、それぞれに加える数値を調節する事で可能になります。