2016-12-20 12 views
0

マイコード値がWPF に適切に設定されているが、UWPの値がchanged.Itsある値が400.0020141601525 及び300ポイントの正確な値を取得するには?

座標これ以上の点において

Double x= 400.002015366677,y =300.000014; 
Point point = new Point(x,y); 

あります

uwpでポイントの元の値を取得する方法は?

おかげで,, WPF、UWPでPoint structureで使用Point Structureとは異なり

+1

'double'は正確な値の型ではありません。切り捨てエラーが表示されますが、プログラムが補償するために最善を尽くしますが、完全ではありません。 http://stackoverflow.com/questions/753948/why-is-floating-point-arithmetic-in-c-sharp-imprecise – Abion47

+0

これは、浮動小数点数に固有の精度が欠けている可能性があるためです。 https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – JamesFaix

+0

@JamesFaix浮動小数点値は「精度が不足」しません。 "精度"はブール値の属性ではなく、言い換えれば、変数/値は*正確であるとか*正確でない*とは言えません。代わりに、正確さは相対的な用語であり、変数/値は特定の桁数に対して正確であると言える。 –

答えて

0

Windows.Foundation名前空間の下や.NET、C++とJavaScriptで使用できるWindowsランタイム構造です。

我々はFields of Point structureを見れば、我々はフィールドは、次のようにデータ型を使用見つける:

[JavaScriptを] | System.Single [.NET] | のfloat32 [C++]

だから内部、値は、単精度32ビット数として記憶されます。しかし、Microsoft .NET言語を使用している間、Pointのデータメンバーは、フィールドではなくdoubleのプロパティとして公開されています。

参考プロジェクションと備考のポイントセクションのメンバー:

は、Microsoft .NET言語(C#またはMicrosoft Visual Basic)、またはVisual C++コンポーネントの拡張機能(C++/CXを使用している場合)、Pointには非データメンバーがあり、そのデータメンバーはフィールドではなく読み書き可能なプロパティとして公開されます。 .NETは、Windowsランタイムアプリケーションの.NETの一部として出荷されるSystem.Runtime.WindowsRuntime.dll interopアセンブリを通じてこの機能をサポートします。

したがって、C#またはVisual Basicを使用している間は、System.Doubleというパラメータを2つ受け入れるPoint.Point constructorを使用します。 C#またはVisual Basicの場合、Point.XおよびPoint.Yプロパティのデータ型もSystem.Doubleです。

そして、何あなたのコード内で起こることは初期化中に、あなたのxy値は最初System.Singleに変換され、プロパティを取得するとき、それは次のように再びSystem.Doubleに変換していることである:

Double x = 400.002015366677, y = 300.000014; 

Double X = Convert.ToDouble(Convert.ToSingle(x)); //X is 400.00201416015625 

Double Y = Convert.ToDouble(Convert.ToSingle(y)); //Y is 300 

Point structureのために、私は私たちは正確な元の価値を得ることができないのではないかと恐れています。 Pointは、通常、UIの配置とレンダリングに使用されます。このシナリオでは、整数値を使用することをお勧めします。 ポイントため

XYは、非整数値とすることができます。しかし、これにより、サブピクセルのレンダリングが可能になり、サブピクセルのエッジに沿って色を変更したり、直線にアンチエイリアスを適用することができます。これがXAMLレンダリングエンジンがサブピクセル境界を処理する方法です。したがって、最良の結果を得るには、UIの配置とレンダリングに使用される座標と図形を宣言するときに整数値を使用します。

二重の値が必要な場合は、新しい構造体を定義し、Pointを使用しないことをお勧めします。

関連する問題