見出し画像

『実務で使える Automation 360 Bot開発テクニック』#11

「数値に関する小技」


剰余

「数字: 代入」アクションでは四則演算(+, -, *, /)を使用した式を設定できますが、剰余演算子(%)が使えません。
このため、外部パッケージやscriptを使用して剰余を求めている方も多いのではないでしょうか?
または、

剰余 = 被除数 - (商 * 除数)

を標準アクションを使用して実現している方もいるかもしれません。
ここでは、外部パッケージ、scriptを使用せずに比較的簡単に剰余を求める方法を紹介します。


「LegacyAutomation:parseVariableOperation」を使用する

「LegacyAutomation:parseVariableOperation」を使用する事で、
剰余演算子(%)が使えるようになります。

「LegacyAutomation」について
Automation 360の前の製品「Enterprise 10 / Enterprise 11」からAutomation 360に移行したBotに使用されるもので、新規のBotに使用する事は推奨されていませんが、剰余を求めるという事に関しては使用するのもアリと思います。

今回は例として15 ÷ 6 の剰余 = 3を求めます。

変数

以下の変数を作成します。

$$
\begin{array}{|l|l|l|}\hline
\texttt{名前} & \texttt{タイプ} & \texttt{説明} \\
\hline
\texttt{nDividend} & \texttt{数字} &
\texttt{被除数}\\
& & \texttt{デフォルト値:15}\\ \hline
\texttt{nDivisor} & \texttt{数字} &
\texttt{除数}\\
& & \texttt{デフォルト値:6}\\ \hline
\texttt{nRemainder} & \texttt{数字} &
\texttt{剰余}\\ \hline\texttt{sFormula} & \texttt{文字列} &
\texttt{計算式}\\ \hline
\end{array}
$$


実装

実装のイメージです。

  • 1行目:「文字列: 代入」アクション
    $nDividend.Number:toString$ % $nDivisor.Number:toString$ ⇒ $sFormula$
    ※ "15 % 6"という文字列を作成して $sFormula$ に代入

  • 2行目:「数字: 代入」アクション
    $sFormula.LegacyAutomation:parseVariableOperation.String:toNumber$ ⇒ $nRemainder$
    ※"15 % 6"を「LegacyAutomation:parseVariableOperation」で計算し、結果を数字に変換して $nRemainder$ に代入

これで $nRemainder$ に 3 という数字が入ります。


切り捨て

小数点以下の数字の切り捨ては「数字: 文字列に変換」で「小数点以下の桁数を入力 」に 0 を指定して文字列に変換してから、再度数字に変換するという方法が一般的かと思います。

$nValue$ = 123.45 の時、

$nValue$(123.45)を小数点以下の桁数 0 の文字列("123")に変換して$sValue$に代入

$sValue$("123")を数値(123)に変換して$nValue$に代入

この場合、文字列タイプの変数 $sInteger$ を作る必要があります。


「Number:toString」を使用

「Number:toString」を使用すると小数点以下が切り捨てられた文字列になります。

$nValue$ = 123.45 の時、「数字: 代入」で「ソース数の変数/値を選択」に以下を設定すると、$nValue$が 123 という値になります。

$nValue.Number:toString.String:toNumber$

この例では$nValue$(123.45)をNumber:toStringで("123")に変換し、さらにString:toNumberで(123)に変換しています。
この場合は $sInteger$ が不要になります。


小数点以下の桁数が不明な数値を文字列に変換

数字タイプの変数に小数点以下の桁数が不明の値が入っている時、それを文字列に変換する方法を紹介します。

「数字: 文字列に変換」では小数点以下の桁数を指定する必要があります。

小数点以下の桁数が不明の場合、桁数が足りないと正確に変換されません。
このため、桁数に大きめの数字を入れる事で対応しがちですが、
"123.450000000"
のように末尾に不要な0が連続してしまいます。(不要な0を後から削除する手間が発生)


空の文字列と数値を結合する

$nValue$が 123.45 の場合、一度、任意タイプの変数に $nValue$ を代入し、空の文字列と任意タイプの変数を結合する事で文字列に変換します。


変数

以下の変数を作成します。

$$
\begin{array}{|l|l|l|}\hline
\texttt{名前} & \texttt{タイプ} & \texttt{説明} \\
\hline
\texttt{aValue} & \texttt{任意} &
\texttt{\$nValue\$を代入する}\\ \hline
\texttt{nValue} & \texttt{数字} &
\texttt{変換対象の数値}\\ 
 &  &
\texttt{デフォルト値:123.45}\\ \hline
\texttt{sEmpty} & \texttt{文字列} &
\texttt{空の文字列}\\ \hline
\texttt{sValue} & \texttt{文字列} &
\texttt{文字列に変換後の値を格納する}\\ \hline
\end{array}
$$


実装

実装のイメージです。

  • 1行目:「数字: 代入」アクション
    $nValue$ ⇒ $aValue$
    ※123.45を$aValue$に代入

  • 2行目:「文字列: 代入」アクション
    $sEmpty$$aValue$ ⇒ $sValue$
    ※空の文字列と任意タイプの変数(内部的には 123.45 という数値)を結合し
     $sValue$に代入

これにより、小数点以下の桁数に依存せず、数値を文字列に変換する事ができます。

なお、AAにおける小数点以下の桁数は最大9桁のようです。


任意タイプの変数にはあらゆるタイプの値を代入する事ができます。
文字列と数値を直接結合する事はできませんが、任意タイプの変数に代入する事で文字列と結合する事ができます。
文字列と結合する事で、AAが内部で自動的に数値⇒文字列という変換を行います。

「任意タイプの変数にはどんなタイプでも入れられる」というのは一見便利なように見えますが、今回のように任意タイプでなければいけない明確な理由がない限り使用すべきではありません。
乱用してしまうとその変数にどんな値が入っているかが分からなくなります。


まとめ

今回は剰余、小数点以下の切り捨て、小数点を含む数値の文字列への変換を紹介しました。
小数点以下第n位の切り捨て、切り上げ、四捨五入については標準機能ではロジックを組まないと実現できないため、割愛しています。

記事になりそうなネタがあったら追加しますが、今回で『実務で使える Automation 360 Bot開発テクニック』シリーズは終了となります。


いいなと思ったら応援しよう!