計算
最終更新日: 2022年8月25日
ここでは顧客モデルに「顧客の生年月日から年齢を算出する」スクリプトを導入する例を説明します。
スクリプトのタイプを「項目」とします。式を記述する項目を指定します。
DATEDIF関数とTODAY関数を使った、生年月日項目から年齢を求めるブロックを組み立てた例です。
このようにブロックを使って同じモデル内の項目を使った式を組み立てることができます。
「保存」ボタンをクリックします。これでスクリプトの設定が完了しました。
項目に(ブロックを使った)式を組み立てる場合、次のルールがあります。
タイプに "モデル" を選択すると、モデルを操作するタイミングで任意の式を実行することができます。
例えば "登録(初期データ作成)" のタイミングで、複数の項目に値をセットする場合は次の通りです。
モデルの操作タイミングで(ブロックを使った)式を組み立てる場合、次のルールがあります。
小数の計算には誤差が含まれることがあります。"0.1" を 100 回足し算するスクリプトを例に説明します。
結果は次のようになります。
これは Wagby の不具合ではありません。どのようなコンピュータを使っても小数の計算には誤差が含まれることが知られています。
この対応として Wagby は誤差を極小化する関数 ADD(足し算), MUL(掛け算), SUB(引き算), DIV(割り算)を用意しています。
同じスクリプトを、ADD 関数を使う形式に書き換えた例を示します。ADD 関数は数字を文字列表現で指定します。また、計算結果も文字列となっています。
結果は次のようになります。
消費税を考慮した金額計算を考えてみます。四則演算は、ほとんどの場合、正しい値を返しますので次の式は間違いではありません。
これを念のため ADD 関数と MUL 関数に置き換えると次のようになります。VALUE 関数で数値を表す文字列を数値に変換します。
小数の計算を含み、かつ演算誤差をできるだけなくす必要のある式は、できるだけ ADD や MUL といった関数を使うことを推奨します。
他にもROUND関数などを使って誤差を丸める方式や、0.1を乗じる式を「10倍して10で割る」ように解釈して式の形を変えることで演算誤差を抑える考え方もあります。ある程度の誤差を許容できるのか、(金額のように)間違ってはいけない値なのかを判断し、式を作成するようにしてください。
ADDやMULといった関数を利用すると、式が読みにくくなります。また、実行速度も(通常の四則演算に比べると)遅くなります。通常は気になりませんが、多くのデータを計算するときには実行速度が問題になる可能性があります。
項目ごとに設定する
今回の例では、求めたいのは年齢ですので、「年齢」項目を指定します。
ルール
モデル操作タイミングで設定する
ルール
計算誤差について
9.99999999999998
10.0
ワンポイント
ADD関数の問題点