« おばけつぶやき帳 | トップページ | 第8回 手順6 »

2008年5月19日 (月曜日)

第7回 手順5

手順5

さていよいよ手順5ですが、「3)%表示」をとりあげます。ここでは考えなければならないことが沢山あります。単なる「%」を表示させることだけであれば、色々な方法がありますがここでは最も簡単な、インチキみたいな方法をお知らせします。というのも手順5で説明したいことは、単に「%」を表示させることではないので、その点をご了解下さい。


3)%表示

では「計算2」ボタンで出した計算結果の表示されるfld “NeIre”の数値の後に「%」を表示させる方法ですが……;まず最終的な画面を次に表示しておきます。

Itoh007

ではこの「%」をどうやって図のように表示させるのかですが……。まず新しいボタンを一つ作ります。作ったボタンを値入率が表示されるフィールドの適当な部分に移動します(上図のような位置)。次に、そのボタンを選択したまま、レヴォルーションの「Inspector」アイコンをクリックします。すると、選択されたボタンの様々な属性を設定するためのウィンドウが開きます。このウィンドウをインスペクタ・ウィンドウと呼び、次の様なものになります。

Itoh008

インスペクタ・ウィンドウの上のほうにあるボタンが「Basic Properties」となっていることを確認します。次のウィンドウにある「Name」でボタンの名前を「PCT」に、その下の「Label」でラベルを全角の「%」に設定します。さらに「Style」選択用のボタンでボタンのスタイルを「Opaque Button」に設定します。「Opaque Button」に設定するとボタンをボタンらしくしている部分が消えてしまいます。

Itoh009

次に上図の「Basic Properties」ボタンをクリックすると下図左の選択肢が表示されますから、その中から図のように「Text Formatting」を選択します。すると下図右のようにウィンドウがかわりますので、図で示されているように属性を変更します。
  

Itoh010  Itoh011

ボタンに対するこうした操作により、ボタンの持つ属性(プロパティ;property)を変更することでボタンを単なる文字表示用のオブジェクトにすることもできます。


さてさて前置きが長くなりました。本題の「%表示」の本質的な問題について説明をする必要があります。試しに売価を「999」とし、原価を「123」とした時の値入率を「計算2」ボタンを使って表示させてみましょう。すると結果は「0.876877」になります。これを%表示に直した場合には「87.6877」になります。計算結果を「%表示」に直すことはある意味簡単です。計算結果に値“100”を掛ければ良いのですから……。処が、数値を扱う上で重要なことが足りません。それは「有効数値」を何桁にするかということです。何故なら計算結果が小数になる場合、小数点以下をどう取り扱うかによって使うべき関数(function)が異なるからです。(例えば、round、 trunc、 mod、 statRound等の関数があります。)従って、小数点以下の扱いを先に決めておかないとスクリプトが書けないことになります。
例えば、


小数点第2位で四捨五入する場合、表示は小数点第1位まで;
小数点第3位で四捨五入する場合、表示は小数点第2位まで;

あるいは、
小数点以下を切り捨てる場合、表示は正の整数のみ;

同様に
小数点以下を四捨五入する場合も、表示は正の整数のみ;

と表示させる数値が異なったものになります。

ここでは「四捨五入を使って%表示後の小数第2位まで」を表示させることとします。

上の条件を満たすために今回使用するのは「round(ラウンド)」という関数です。
「round(ラウンド)」を英和辞書で調べてみると訳語の一つに『四捨五入する、丸める』というのがあります。逆に和英辞書で「四捨五入」を調べてみると『round』が載っています。但し、英語では「round XX」とか「round XX down」とか表現し、これから説明するRunRevのスクリプトとは多少異なります。(この辺りのことをさしてRunRevのスクリプト言語を「英語に良く似た」と表現するわけです。つまり英語そのものではないということです。)
「round(ラウンド)」をRunRev辞書で調べてみると“to round off numbers and eliminate insignificant digits for financial applications.”、つまり「数値を四捨五入して、財務関連のアプリケーションでは意味のない数値を消去する」のに使うとあります。
関数「round(ラウンド)」は次の形式で使います。因みに関数というのは“A piece of code that computes a value and returns the value to the handler that called it.”、則ち「その関数を呼び出したハンドラに対し、値を計算した後の新たな値を返す役割をする一連のコード」のことです。今はなんのことだかさっぱりわからないと思いますが、コマンドと関数の違いは、コマンドは動作を指示するもの、関数は結果を返すもの、と理解しておいて下さい。さらに関数は通常コマンドの書かれたステイトメントの中で使われます。


round(number,precision)
()内は(引数1,引数2)となっており「,」を忘れないこと


()内の「number」と「precison」は引数(ひきすう)と呼ばれます。また引数「number」は実際の「数字」であっても、数値を含むコンテナ(例えば計算結果をだすためのフィールドを使った計算式)でも構いません。引数「precision」は、「精度」或いは「有効性」の意味で、四捨五入の対象となる桁位置を整数で表記します。この桁位置の指定には少し癖がありますので覚えておいて下さい。
round(845.6604,2) は 845.66
round(845.6654,2) は 845.67

つまり「精度(precision)」に「2」を設定すると「小数点第3位を四捨五入」するわけです。

以上の点を考慮してスクリプトを書くのですが、その前に「%へ変換」というボタンを作ってちょっとしたテストをしてみます。(ボタン名は“TrimTo”、ラベルが「%へ変換」)

Itoh012

テスト用のボタン「%へ変換」では、round 関数の引数1“number”には「fld “NeIre”」を使い、引数2“precision”には「2」を使います。テスト用のスクリプトは次の様になります。


on mouseUp
put round(fld “NeIre” * 100,2) & CR
put round(fld “NeIre”,2)* 100 after MSG
end mouseUp

売価を「999」、原価を「123」として、「計算2」ボタンをクリック後、更に「%へ変換」をクリックすると、次の図のように、メッセージ・ボックスに二行にわたって二つの数値が表示されるはずです。二つの数値とそれに対応するround関数の部分を見比べて、その違いを自身で考えてみて下さい。ポイントは単純な算数の視点です!!

Itoh013

【寄道】

テスト用のスクリプトには幾つかのテクニックが示されています。一つは、単純に「put round(fld “NeIre” * 100,2) & CR」のように「put」コマンドを「before、into、after」なしで(コンテナの指定をしないで)使った時には、その結果はメッセージ・ボックスに表示されるということ。
演算子「&」は「二つの文字列を接続し一つの文字列とする時」に使うことができ、「& CR」とした時には、改行コードが入ること。
又「CR」は「Carridge Return」の略で、「改行」意味します。マックとWindowsあるいはLinuxでは扱われ方が異なり、「CRLF」とする場合もある。
「MSG」は「message」の略でメッセージ・ボックスを意味します。

【メッセージ・ボックスの利用】
メッセージ・ボックスは、“The message box is a container as well as a window. You can show and hide the message box, put information into it, and get information from it.”;「メッセージ・ボックスはコンテナであると同時にウィンドウでもあります。メッセージ・ボックスを開いたり閉じたり、メッセージ・ボックスに情報を入れたり、取り出したりできます」。

メッセージボックスを使うと、簡単なステイトメントを直接メッセージ・ボックスにタイプしてスクリプトの実行をすることができます。上の図の反転部分がそれで、ボタンに書いたスクリプトと同じようなモノをメッセージ・ボックスにタイプしてスクリプトを実行させることができます。メッセージボックスでは、ハンドラを必要としないので、「mouseUp」とか「mouseDown」を必要としません。その所為で、スクリプトを書いている途中で動作チェックする時に便利に使うことができます。

上の図で「数値」が表示されている部分が、メッセージ・ボックスのコンテナとしての役割を担う部分で、正しい計算結果が得られるかどうかを、フィールドに入力する前にメッセージ・ボックスに表示させることができます。

|

« おばけつぶやき帳 | トップページ | 第8回 手順6 »