生成したオブジェクトが2つあります。
Test
Test2
このクラスにはDStatus(Double型)で宣言した変数があります。
if Test.DStatus <> Test2.DStatus
とすると、値が等しいのに<>がTrueとなります。
ですが、ステップ実行をして確認しても、
Test.DStatus、Test2.DStatusをローカル変数に代入してから
比較してもどうやっても値は等しいはずなのに
<>がTrueになります。
まったく原因がわかりません。値が等しいのに違うと判定されて困っています。
こんなことってあるのでしょうか?
格納している値は何ですか?
また、その現象が再現できるコードを、ここに挙げてみるのはいかがですか?
Double型の値の比較って事なので誤差が出てるんじゃないでしょうか?
SameValueを使うか差の絶対値が閾値以下なら同値とみなすなりの処理したら良いかと思います。
Double型の比較あるあるですね、過去何度も経験しました
0コンマ何桁目かまで調べると違う値だとすぐにわかりますよ。
TestとTest2の宣言が別になってないですか?
Ver
Test,Test2 : T型;
としていて、
Test.DStatus := 1;
Test2.DStatus := 1;
として比較してみてください。
Ver
Test : T型;
Test2 : T型;
とすると、別の型として扱われますので、比較すると<>になります。
みなさん、ありがとうございます。
誤差が問題でした。
自分でも以前に同じような体験をしていたのに、そこに気付きませんでした。
RoundTo(差分,-2)
とし、0と比較し問題解決しました。
ありがとうございます。
ツイート | ![]() |