2024/10/05

四捨五入にご用心!

今回は、@関数と LotusScript の丸め処理、なかでも四捨五入についてまとめます。Notes の世界で四捨五入するには Round という関数を使用すると理解していましたが、結果的には ”四捨五入” ではない部分がありました。順に確認しましょう。


@Round 関数

式言語で丸め処理のを行う関数に @Round があります。

@Round (式言語)

説明には『指定された数値を最も近い整数に四捨五入します。』とあります。そして、構文は以下の通りとなっています。

   @Round( number ; factor )

2 つ目の引数 factor が丸める桁を指定します。0.1 と指定すると少数 1 桁の値に丸めます。


LotusScript の Round

Round 関数は LotusScript にも存在ます。

Round 関数 (LotusScript 言語)

説明には『値を指定した小数で丸めます。』とあり、構文は次の通りです。

   Round ( numExpr , places )

@Round と同様に 2 つ目の引数が丸める桁の指定です。ただし、『目的の小数点以下桁数を表す数式』となっています。少数 1 桁の値に丸めたいときには 1 と指定することになります。


丸め処理の不思議

2 つの関数を紹介しましたが気になることはありませんでしたか?

そうなんです。@Round は ”四捨五入” となっていますが、Round は ”丸め” となっています。これが翻訳の問題なのか、機能が違うのか確認しましょう。

@関数と LotusScript で少数 1 桁の値に丸めるプログラムを作成します。数値 x の値を変えながら動作を観察します。すると次のようが結果が出ました。

x 0.249 0.250 0.251 0.349 0.350 0.351
@Round(x; 0.1) 0.2 0.3 0.3 0.3 0.3 0.4
Round(x, 1) 0.2 0.2 0.3 0.3 0.4 0.4

いかがですか?

どちらも四捨五入ではありませんでした。しかも、ちょうど 5 の時の処理は @関数は”奇数”になるように調整、LotusScript は”偶数”となるように調整していました。

なぜ、このような違いになっているのか不思議ですね...


まとめ

今回の検証で、Round は、@関数、LotusScript とも四捨五入ではないことがわかりました。これら関数を利用する際には特性を理解した上で使用しましょう。正しい結果が得られない可能性がありますので...。

ちなみに、ノーツの四捨五入について調査していると以下のリンクに出くわしました。

LotusScript での四捨五入について

本家のサポート情報で、LotusScript で四捨五入を行う関数は用意されていないので Evaluate で @Round を実行する方法が紹介されています。今回の検証結果によるとうまくいかないはずなのですが...。

注意しましょう!


0 件のコメント:

コメントを投稿