- - PR -
四捨五入について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-06-15 20:32
こんばんは。
初歩的な質問ですいません。 VB2005の四捨五入について教えてください。 ある数値の変数の値を円から万単位にするため 10000で割りますが(四捨五入です) Fix(変数/10000+ 0.5 * System.Match.Sign(変数)) としましたが Fix(変数/10000+ 0.5 * System.Match.Sign(変数/10000))が 正しいのでしょうか? それともう1点お聞きしたいのが 率の四捨五入の方法です。 四捨五入は小数点以下2桁目を四捨五入したいのです。 この場合 Fix(変数A/変数B+ 0.5 * System.Match.Sign(変数A/変数B)) ではなく 正しくはどのようにするのでしょうか? 申し訳ありません、ご教授宜しくお願いします。 | ||||||||||||
|
投稿日時: 2008-06-15 20:58
四捨五入のメソッドが存在しますので、こちらを軸に考えてはいかがでしょうか?
http://msdn.microsoft.com/ja-jp/library/ef48waz8(VS.80).aspx 10000で割る、Roundで四捨五入、10000をかける。 追記 小数点以下2桁目とかは引数の多いRoundメソッドで。 http://msdn.microsoft.com/ja-jp/library/system.math.round(VS.80).aspx 追記2 提示すべきメソッドのオーバーロードが間違っていましたので訂正します。 編集前は http://msdn.microsoft.com/ja-jp/library/75ks3aby(VS.80).aspx を書いていましたが、このメソッドでは期待した結果が得られません。 追記3 引数が1つのオーバーロードも誤りです。 編集前は http://msdn.microsoft.com/ja-jp/library/wyk4d9cy(VS.80).aspx を書いていましたが、このメソッドでは期待した結果が得られません。 [ メッセージ編集済み 編集者: Azulean 編集日時 2008-06-16 07:26 ] [ メッセージ編集済み 編集者: Azulean 編集日時 2008-06-16 22:45 ] | ||||||||||||
|
投稿日時: 2008-06-16 00:52
それだと 「四捨五入」 ではなく 「偶数丸め」 なので、MidpointRounding 引数のあるオーバーロードが正しいです。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2008-06-16 07:24
失礼しました。
オーバーロード版の機能の差を認識していませんでした。 じゃんぬねっとさんのご指摘通り、引数が1つか、MidpointRounding引数のあるオーバーロードを使う必要があるようです。 | ||||||||||||
|
投稿日時: 2008-06-16 09:27
? 引数が 1 つのオーバーロードも偶数丸めですよね。(ただの書き間違いかも?) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2008-06-16 09:56
既に回答がついているので、以下のお話は完全に蛇足です。
この2つはどちらも同じ結果になりますよね。 10000で割ろうが割るまいが、変数の符号は変わらないので。 ちなみにVB2003以前だと Roundメソッドで端数処理の方法を指定できず常に偶数丸めだったので、いわゆる四捨五入をやりたい時にはこんな風に書いていました。
小数第二位で四捨五入したい場合はこんな感じですか。
FIX() は単純に端数を捨てるだけですが、Floor() はその値をこえない最大の整数を返すので、負数の四捨五入を考えるのであればこちらのほうが楽でしょう。 ※しつこいですがこれはVB2003までのお話で、VB2005以降なら Round() のオーバーロードを使ったほうが簡単です。 | ||||||||||||
|
投稿日時: 2008-06-16 10:11
みなさんありがとうございます。
おかげ様で Math.Round(55 / 99 * 100, 1, MidpointRounding.AwayFromZero) で、できました。 1つ勉強になりました。 | ||||||||||||
|
投稿日時: 2008-06-16 12:19
某所でご指摘を受けましたが、先の私の書き込みについて1点注意をお願いします。
なびさんが書いた上の2つの方法と、私が書いた下の方法とでは、負数を丸めた結果が異なります。 -2.5 を計算した場合、なびさんが書いた方法では -3 になりますが、私の書いた方法では -2 になります。 小数第1位が4以下ならば切り捨て、5 以上ならば切り上げる四捨五入の場合、なびさんが書いた方法が正しいです。 誤った方法を書いたことをお詫びいたします。 |