演算子<> が正常ではない

解決


ノー  2012-02-16 09:28:31  No: 41614  IP: 192.*.*.*

生成したオブジェクトが2つあります。
Test
Test2

このクラスにはDStatus(Double型)で宣言した変数があります。

if Test.DStatus <> Test2.DStatus 

とすると、値が等しいのに<>がTrueとなります。
ですが、ステップ実行をして確認しても、
Test.DStatus、Test2.DStatusをローカル変数に代入してから
比較してもどうやっても値は等しいはずなのに
<>がTrueになります。

まったく原因がわかりません。値が等しいのに違うと判定されて困っています。
こんなことってあるのでしょうか?

編集 削除
igy  2012-02-16 10:54:56  No: 41615  IP: 192.*.*.*

格納している値は何ですか?
また、その現象が再現できるコードを、ここに挙げてみるのはいかがですか?

編集 削除
au  2012-02-16 11:01:26  No: 41616  IP: 192.*.*.*

Double型の値の比較って事なので誤差が出てるんじゃないでしょうか?
SameValueを使うか差の絶対値が閾値以下なら同値とみなすなりの処理したら良いかと思います。

編集 削除
初心者  2012-02-16 13:35:27  No: 41617  IP: 192.*.*.*

Double型の比較あるあるですね、過去何度も経験しました
0コンマ何桁目かまで調べると違う値だとすぐにわかりますよ。

編集 削除
HOta  2012-02-16 13:47:02  No: 41618  IP: 192.*.*.*

TestとTest2の宣言が別になってないですか?

Ver
  Test,Test2 : T型;

としていて、
  Test.DStatus := 1;
  Test2.DStatus := 1;
として比較してみてください。


Ver
  Test : T型;
  Test2 : T型;
とすると、別の型として扱われますので、比較すると<>になります。

編集 削除
ノー  2012-02-16 14:59:52  No: 41619  IP: 192.*.*.*

みなさん、ありがとうございます。
誤差が問題でした。
自分でも以前に同じような体験をしていたのに、そこに気付きませんでした。

  RoundTo(差分,-2)

とし、0と比較し問題解決しました。
ありがとうございます。

編集 削除