計算

最終更新日: 2022年8月25日

項目ごとに設定する

ここでは顧客モデルに「顧客の生年月日から年齢を算出する」スクリプトを導入する例を説明します。

スクリプトのタイプを「項目」とします。式を記述する項目を指定します。
今回の例では、求めたいのは年齢ですので、「年齢」項目を指定します。

年齢項目の式の記述を開始する

DATEDIF関数TODAY関数を使った、生年月日項目から年齢を求めるブロックを組み立てた例です。

このようにブロックを使って同じモデル内の項目を使った式を組み立てることができます。

ブロックによる式の組み立て

「保存」ボタンをクリックします。これでスクリプトの設定が完了しました。

ブロックを保存する

ルール

項目に(ブロックを使った)式を組み立てる場合、次のルールがあります。

順番
式の実行は、モデル項目の並び順に(上から下へ)実行されます。順番に実行されることを念頭に式を組み立ててください。
読み込み専用になる
計算で求める項目は、読み込み専用となり編集はできません。
別の項目に値をセットすることはできない
項目ごとの計算式は、スクリプトのタイプを「項目」とし、項目名の部分に計算式を指定する項目を選択します。このとき、「...に...をセット」ブロックで、対象項目(この例では年齢項目)に値をセットしてください。別の項目に値をセットすることはできません。

モデル操作タイミングで設定する

タイプに "モデル" を選択すると、モデルを操作するタイミングで任意の式を実行することができます。

例えば "登録(初期データ作成)" のタイミングで、複数の項目に値をセットする場合は次の通りです。

型に応じて値を指定する

ルール

モデルの操作タイミングで(ブロックを使った)式を組み立てる場合、次のルールがあります。

順番
式の実行は、ブロックの並び順に(上から下へ)実行されます。
読み込み専用にならない
例えば "登録(初期データ作成)" でセットした値は登録画面表示時に値をセットしますが、利用者はその値を書き換えることができます。なお、開発者はあえてその項目を読み込み専用にしたり隠し項目にすることで、利用者が変更できないようにすることもできます。

計算誤差について

小数の計算には誤差が含まれることがあります。"0.1" を 100 回足し算するスクリプトを例に説明します。

0.1を100回足し算する

結果は次のようになります。

9.99999999999998

これは Wagby の不具合ではありません。どのようなコンピュータを使っても小数の計算には誤差が含まれることが知られています。

この対応として Wagby は誤差を極小化する関数 ADD(足し算), MUL(掛け算), SUB(引き算), DIV(割り算)を用意しています。

同じスクリプトを、ADD 関数を使う形式に書き換えた例を示します。ADD 関数は数字を文字列表現で指定します。また、計算結果も文字列となっています。

ADD関数の例

結果は次のようになります。

10.0

消費税を考慮した金額計算を考えてみます。四則演算は、ほとんどの場合、正しい値を返しますので次の式は間違いではありません。

消費税を考慮した金額計算の式

これを念のため ADD 関数と MUL 関数に置き換えると次のようになります。VALUE 関数で数値を表す文字列を数値に変換します。

消費税を考慮した金額計算の式 (2)

小数の計算を含み、かつ演算誤差をできるだけなくす必要のある式は、できるだけ ADD や MUL といった関数を使うことを推奨します。

ワンポイント

他にもROUND関数などを使って誤差を丸める方式や、0.1を乗じる式を「10倍して10で割る」ように解釈して式の形を変えることで演算誤差を抑える考え方もあります。ある程度の誤差を許容できるのか、(金額のように)間違ってはいけない値なのかを判断し、式を作成するようにしてください。

ADD関数の問題点

ADDやMULといった関数を利用すると、式が読みにくくなります。また、実行速度も(通常の四則演算に比べると)遅くなります。通常は気になりませんが、多くのデータを計算するときには実行速度が問題になる可能性があります。