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

解決


ノー  2012-02-16 18:28:31  No: 41614

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

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

if Test.DStatus <> Test2.DStatus 

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

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


igy  2012-02-16 19:54:56  No: 41615

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


au  2012-02-16 20:01:26  No: 41616

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


初心者  2012-02-16 22:35:27  No: 41617

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


HOta  2012-02-16 22:47:02  No: 41618

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

Ver
  Test,Test2 : T型;

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

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


ノー  2012-02-16 23:59:52  No: 41619

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

  RoundTo(差分,-2)

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加