0

したがって、次のコードでは、resizeWidth と resizeHeight は numericUpDown コントロールです。また、tempBitmapW と tempBitmapH は両方とも float です。

float rW = (float)resizeWidth.Value;
float rH = (float)resizeHeight.Value;
rH = (float)Math.Truncate(tempBitmapH * ((float)rW / tempBitmapW));
int rsW = (int)rW;
int rsH = (int)rH;
resizeWidth.Value = rsW;
resizeHeight.Value = rsH;

これをデバッグすると、rsW と rsH、rW と rH が 0 として読み取られません。しかし、なんらかの理由で、値 0 が最小/最大範囲外にあるため (最小値が 1 に設定されている)、numericUpDown コントロールがエラーをスローするため、基本的には 0 として読み取られます。

私は何を間違えましたか?

4

2 に答える 2

1

キャストがどのように機能するかを正しく理解していないだけです。float を int にキャストする方法が原因で、0 を取得しています。float 値は 0.42 かもしれませんが、整数では 0 にキャストされます。

キャストがどのように機能するかを詳細に確認する必要があります。これにより、問題が解決する可能性があります。

于 2012-05-17T21:51:13.887 に答える
0

squelos の答えをさらに詳しく説明すると、おそらく、デバッガーで値を見ている瞬間と、例外がスローされている瞬間の 2 つの異なる瞬間のように思えます。値がゼロであるという例外が発生した場合は、おそらく値がゼロであることが原因です。

ゼロになる可能性がある理由は、float から int へのキャストが常に最も近い整数に切り捨てられるためです。

于 2012-05-17T21:56:21.497 に答える