私は Thickness
Aは、thickness
Bに等しい厚みを比較するには?
そして...それはいけない仕事かどうかをチェックすることにより、thickness
を比較したいです。常に偽、なぜ?
ps。
new Thickness(2.1) returns 2.09923289[..]
ない2.1
とnew Thickness(2.0)
リターンが2.0
をクリアするのはなぜ?
私は Thickness
Aは、thickness
Bに等しい厚みを比較するには?
そして...それはいけない仕事かどうかをチェックすることにより、thickness
を比較したいです。常に偽、なぜ?
ps。
new Thickness(2.1) returns 2.09923289[..]
ない2.1
とnew Thickness(2.0)
リターンが2.0
をクリアするのはなぜ?
ダブル値があるため、メモリに格納されているか、二重の、比較することは安全ではありません。私はif(Math.Abs(Thickness - new Thickness(2.1)) < TOLERANCE)
のようなものを使用することをお勧めします。 あなたは簡単なテストを行うと、のようなものをチェックしてみてください:
var passed = false;
if(0.2 + 0.1 == 0.3)
passed = true;
をそして、あなたはそれが左、上、右と厚さの下部のためのfalse
'if(Math.Abs(lessonGrid.BorderThickness.Bottom-2.1)<0.01)' が動作するようになりました。お返事ありがとうございました – Niewidzialny
あなたは大歓迎です。私の答えがあなたの問題を解決したら、あなたはこの答えを受け入れることができます。 – FCin
うん、それを待って。私は受け入れる前にいくつかの時間を待たなければならない – Niewidzialny
値は、二重されていることがわかります値。
このように、許容値と比較するには、Math.Absを使用する必要があります。
これらは私があなたのために仕事をする私のWinUXライブラリに持っているヘルパーメソッドです:
public static readonly double Epsilon = 2.2204460492503131E-16;
public static bool AreClose(Thickness value1, Thickness value2)
{
return AreClose(value1.Left, value2.Left) && AreClose(value1.Top, value2.Top) && AreClose(value1.Right, value2.Right) && AreClose(value1.Bottom, value2.Bottom);
}
public static bool AreClose(double value1, double value2)
{
if (Math.Abs(value1 - value2) < 0.00005)
{
return true;
}
var a = (Math.Abs(value1) + Math.Abs(value2) + 10.0) * Epsilon;
var b = value1 - value2;
return (-a < b) && (a > b);
}
あなたは、このようなあなたのシナリオでそれを使用したい:
if (AreClose(new Thickness(2.1), lessonGrid.BorderThickness))
{
// Code-here
}
オリジナルソース:https://github.com/jamesmcroft/WinUX-UWP-Toolkit/blob/develop/WinUX/WinUX.Common/Maths/MathHelper.cs
ありがとう。私は将来それを使用します:) – Niewidzialny
おそらくそれらは2倍の値です。 –