System House ACT Weblog

RSS 1.0 RSS 2.0 ATOM 1.0

マイナス値の切り捨て

仕様書に、
消費税額は 1 円未満を切り捨てる。
と記述されていた場合、
10.5 → 10.0
となるのは、誰もが正しいと答えるでしょう。

では、マイナス値だった場合、
(a) -10.5 → -10.0
(b) -10.5 → -11.0
のどちらを仕様作成者は意図しているのでしょう?

Microsoft Excel の切り捨て関数は FLOOR 関数なのですが、FLOOR 関数ですと (a)-10.0 になります。
つまり、切り捨てとは「ゼロに近い方へ丸める」と定義していることになります。

一方、JavaVB.net, C# 等の floor 関数は、(b)-11.0 になります。
関数仕様では、引数の値「以下」で最大の整数 と定義されています。
単純に表現すれば、「小さい方へ丸める」ということです。

では、データベースの ORACLE 等では、切り捨て関数というと trunc になるのですが、(a)-10.0 になります。
これは、切り捨てとは「その桁以下の数値をゼロにする」と定義しているからです。

どれが正しいかというのは、実はナンセンスな議論になります。
なぜなら、何れも定義の問題だからです。

さて、ここで最初の質問に戻ります。
「消費税額は切り捨てる」と仕様書に記述した作成者の意図はどうなのでしょう?

正解は「わからない!」です。
作成者が仕様書に定義していない以上、作成者以外にわかる人はいないはずです。

しかし、ほとんどのプログラマは、作成者に確認することなく、自分自身の解釈(定義)でプログラミングすることでしょう。
作成者の意図が、その解釈とは異なっていたとしても、テストでもスルーしてしまい、結果的に本番リリース後に発覚するということが多々ある事例です。

悪いことに、SE 自身も自分自身の解釈(定義)で仕様書を作成していることすらあります。
エンドユーザーの担当者が「消費税額は切り捨てる」と言ったので、そのまま記述してしまったということです。

私の経験ではユーザー部門の多くは、切り捨てというとデータベースの trunc 的な「その桁以下の数値をゼロにする」と解釈していることが多いようです。

ということで、SE の皆さん、「切り上げ」や「切り捨て」については、
仕様書に正負の数値を例示する!
ということを心がけるようにしましょう!
そうすれば、仕様書のレビューの段階でユーザー部門に対しても確認することができます。
2010-01-18 17:49:07 投稿者:代表コメントを追加する

この記事への参照記事

参照記事はありません。

この記事へのコメント

コメントはありません。

この記事へのコメントを追加する

 お手数ですが、チェックしてください → 

この記事へのトラックバック

トラックバックはありません。

この記事へのトラックバックを追加する

トラックバックURLは ここを右クリック し、
  • IE … ショートカットのコピー
  • Firefox … リンクの URL をコピー
でコピーできます。
また、こちらのフォーム からトラックバックを送信することもできます。
なお、この記事への言及リンクのないトラックバックは一旦保留させていただいております。ご了承ください。
(トラックバック送信エラーになった場合でも、保留が解除されることによりトラックバックは受け付けられます。)
Webサービス by Yahoo! JAPAN
サンワダイレクト
a System House to build an Accounting system by the Computer Technology