メニュー

Round関数の結果が四捨五入になる場合とならない場合がある

【質問】
AutoMateのRound関数にて、データによって四捨五入になる場合とならない場合がある。
これはAutoMateの仕様によるものなのだろうか。

【回答】
AutoMateのRound関数はVB関数のRound関数を使用しています。
そのため、単純な四捨五入ではなく銀行丸めという考えで演算しています。

例えば端数が0.5より小さいなら切り捨て、端数が0.5より大きいならば切り上げます(通常の四捨五入と同じ)。ただし、端数がちょうど0.5なら切り捨てと切り上げのうち結果が偶数となるほうへ値を丸めます。

<AMSHOWDIALOG>Round(9.4) %Round(9.4)%
Round(9.5) %Round(9.5)%
Round(9.6) %Round(9.6)%
Round(22.4) %Round(22.4)%
Round(22.5) %Round(22.5)%
Round(22.6) %Round(22.6)%
</AMSHOWDIALOG>

上記タスクの演算結果は
9,10,10,22,22,23となります。

上記の定義に基づき、端数が0.5の場合、
i) 9.5の切り捨て結果は9
ii) 9.5の切り上げ結果は10
10は偶数なので、9.5の「銀行丸め」は10となる

22.5も同様に、
iii) 22.5の切り捨て結果は22
iv) 22.5の切り上げ結果は23
22は偶数なので、22.5の「銀行丸め」は22となる

通常の四捨五入をする場合は対象の数字(式の結果)に0.5を足し、Int関数にて整数部だけを取得することで四捨五入処理を行うことができます。

以下サンプルタスクです。
-----サンプルタスクここから-----
<AMVARIABLE ACTIVITY="set" VARIABLENAME="Pri_NumOfDiv">%Int(((Pri_MaxCntForCsv - 1) / Pri_DivNum)+0.5)%</AMVARIABLE>
-----サンプルタスクここまで-----

Knowledge記事検索

Knowledge

News・Information