- PR -

PCで動作が違う?

1
投稿者投稿内容
よっこらしょ
常連さん
会議室デビュー日: 2006/11/18
投稿数: 24
投稿日時: 2006-11-18 14:00
聞きたいのは変数の丸めの動作なのです。

VB2005で、double型の変数があります。
これをCInt関数でもConvertクラスでもいいのですが、Integer型に変換します。
小数第1位で四捨五入するのが目的です。
ここで問題が発生しました。

会社のPCでは、0.5なら切り捨てられるのです。
0.5000…01と0.5より少しでも大きければ切り上げられました。

しかし自宅のPCではちゃんと0.5は切り上げられます。
0.49999…なら切り捨てられます。
これが正常動作なのだと思います。

なぜこのような違いが出てくるのでしょうか?
何処かに設定箇所があるのでしょうか?
基本的な質問ですがよろしくお願いします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-11-18 14:54
会社では、2.5 とか 4.5 とかでやって、自宅では、1.5 とか 3.5 でやってるかとか?
ヘルプを見ると理由がわかりますよ。
http://msdn2.microsoft.com/ja-jp/library/ffdk7eyz(VS.80).aspx
_________________
囚人のジレンマな日々
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-11-18 14:59
引用:

よっこらしょさんの書き込み (2006-11-18 14:00) より:
VB2005で、double型の変数があります。
これをCInt関数でもConvertクラスでもいいのですが、Integer型に変換します。
小数第1位で四捨五入するのが目的です。


いいえ。Convertクラスは四捨五入ではなく、偶数丸めを行います。この事はリファレンスマニュアルにも明記されていますね。

引用:

会社のPCでは、0.5なら切り捨てられるのです。
0.5000…01と0.5より少しでも大きければ切り上げられました。


こちらが仕様書どおりの正しい動作になります。

引用:

しかし自宅のPCではちゃんと0.5は切り上げられます。
0.49999…なら切り捨てられます。
これが正常動作なのだと思います。


0.5が1に切り上げられるのは異常です。もし本当なら.NET Frameworkのバグですね。

るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2006-11-18 16:28
四捨五入をしたいのなら、
普通、Round関数使いませんか?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-11-18 17:15
引用:

るぱんさんの書き込み (2006-11-18 16:28) より:
四捨五入をしたいのなら、
普通、Round関数使いませんか?


Math.Round関数の動作もConvertと同じ偶数丸めだけどね。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-11-18 22:15
こんばんは。

とりあえず +0.5 してから Math.Truncate してもいいかもしれません。

_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-11-18 22:27
指定した精度の数値に四捨五入する

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
よっこらしょ
常連さん
会議室デビュー日: 2006/11/18
投稿数: 24
投稿日時: 2006-11-20 20:45
そうだったのですか。
偶数丸め、初めて知りました。
これを読んで会社と自宅で試したところ、同じ動作になりました。

レスありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)