- - PR -
PCで動作が違う?
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-18 14:00
聞きたいのは変数の丸めの動作なのです。
VB2005で、double型の変数があります。 これをCInt関数でもConvertクラスでもいいのですが、Integer型に変換します。 小数第1位で四捨五入するのが目的です。 ここで問題が発生しました。 会社のPCでは、0.5なら切り捨てられるのです。 0.5000…01と0.5より少しでも大きければ切り上げられました。 しかし自宅のPCではちゃんと0.5は切り上げられます。 0.49999…なら切り捨てられます。 これが正常動作なのだと思います。 なぜこのような違いが出てくるのでしょうか? 何処かに設定箇所があるのでしょうか? 基本的な質問ですがよろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-11-18 14:54
会社では、2.5 とか 4.5 とかでやって、自宅では、1.5 とか 3.5 でやってるかとか?
ヘルプを見ると理由がわかりますよ。 http://msdn2.microsoft.com/ja-jp/library/ffdk7eyz(VS.80).aspx _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2006-11-18 14:59
いいえ。Convertクラスは四捨五入ではなく、偶数丸めを行います。この事はリファレンスマニュアルにも明記されていますね。
こちらが仕様書どおりの正しい動作になります。
0.5が1に切り上げられるのは異常です。もし本当なら.NET Frameworkのバグですね。 | ||||||||||||
|
投稿日時: 2006-11-18 16:28
四捨五入をしたいのなら、
普通、Round関数使いませんか? | ||||||||||||
|
投稿日時: 2006-11-18 17:15
Math.Round関数の動作もConvertと同じ偶数丸めだけどね。 | ||||||||||||
|
投稿日時: 2006-11-18 22:15
こんばんは。
とりあえず +0.5 してから Math.Truncate してもいいかもしれません。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||||||
|
投稿日時: 2006-11-18 22:27
指定した精度の数値に四捨五入する
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-11-20 20:45
そうだったのですか。
偶数丸め、初めて知りました。 これを読んで会社と自宅で試したところ、同じ動作になりました。 レスありがとうございました。 |
1