C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 当HPのRoundUp()について


(過去ログ 17 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■6394 / inTopicNo.1)  当HPのRoundUp()について
  
□投稿者/ ぴーたー (1回)-(2007/08/09(Thu) 14:05:14)

分類:[C#] 

お世話になります。
当HPにありますRoundUpメソッドを参考にさせていただいております。

このRoundUpメソッドでの質問なのですが
MessageBox.Show(ToRoundUp(0.04060000001, 2).ToString());
として実行すると結果が「0.05」となります。

有効桁数を2として指定しているので、結果としては「0.04」を期待していたのですが
これはこのメソッドの仕様でしょうか?

当HPにありますRoundDownメソッドを間に挟みこむとこちらの期待しております結果となります。
MessageBox.Show(ToRoundUp(ToRoundDown(0.04060000001,3), 2).ToString());

以上です、よろしくお願いします。
引用返信 編集キー/
■6395 / inTopicNo.2)  Re[1]: 当HPのRoundUp()について
□投稿者/ じゃんぬねっと (450回)-(2007/08/09(Thu) 14:22:39)
No6394 (ぴーたー さん) に返信
> 有効桁数を2として指定しているので、結果としては「0.04」を期待していたのですが
> これはこのメソッドの仕様でしょうか?

こういう仕様です。
一般的な業務アプリで使う切り上げはそういうもの (それ以外は今のところお目にかかってことはないです) だと思っています。

また 'そういうもの' という固定観念を捨てると、今度は指定精度以下の精度の値をどう扱うかという問題があります。
どう扱うかというのは、切り上げ、切り捨て、四捨五入、五捨六入、偶数丸めなどなどいろいろ考えられます。
たとえば、ぴーたーさんの場合は切り捨てですね。(間に ToRoundDown を挟む)
このようにこのメソッド 1 つでそこまで扱うのは賢明ではないので、他のメソッドと組み合わせた方がわかりやすいと思います。

それはともかくとして、ToRoundUp の引数「精度」は切り上げた結果の精度を意味するので、問題のページの説明がまずいですね。
これに関しては修正しておこうと思います。
引用返信 編集キー/
■6400 / inTopicNo.3)  Re[2]: 当HPのRoundUp()について
□投稿者/ ぴーたー (2回)-(2007/08/09(Thu) 17:22:10)
詳しい説明ありがとうございます。
確かに精度の扱いをどうするかが問題になってきますね。

おっしゃるとおりひとつのメソッドで実装するより
組み合わせで実装するほうが現実的ですね。

ありがとうございました。
解決済み
引用返信 編集キー/
■6402 / inTopicNo.4)  Re[3]: 当HPのRoundUp()について
□投稿者/ じゃんぬねっと (452回)-(2007/08/09(Thu) 17:28:09)
No6400 (ぴーたー さん) に返信
> 詳しい説明ありがとうございます。
> 確かに精度の扱いをどうするかが問題になってきますね。
>
> おっしゃるとおりひとつのメソッドで実装するより
> 組み合わせで実装するほうが現実的ですね。
>
> ありがとうございました。

こちらこそご指摘ありがとうございました。
元記事の XML コメントなどを修正したいと思います。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -