WinRTにdouble
の値を代入する際に問題があります。System.Double type in Windows.Foundation.Size.Width/.Height on WinRT
次のコード
Windows.Foundation.Size size = new Windows.Foundation.Size();
double v = 179.166660308838;
double v2 = v;
size.Width = v;
string t = $"v: {v}, v2: {v2}, size.Width: {size.Width}";
戻るv: 179.166660308838, v2: 179.166660308838, size.Width: 179.166656494141
。ご覧のとおり、v2
とsize.Width
の値が異なります。
私の質問は以下のとおりです。
- ことがあるのはなぜ?
- Windows.Foundation.Sizeに値を格納する必要がある場合(たとえば、
MeasureOverride
/ArrangeOverride
)、予想通りに動作させるにはどうすればいいですか?
Sizeプロパティの基になるストレージタイプは* double *ではなく* float *です。浮動小数点は6桁の桁上がりしかできません。そのうち多くを表示するとランダムノイズの数字が表示されます。 –
@HansPassant私は見るのですが、なぜそれが 'System.Double'と宣言されていますか? – romanoza
それはそうではありません、それはただ二倍を取るコンストラクタを持っています。 –