2017-04-21 14 views
-1

私は2つの整数パラメータを持っています。これらのパラメータを除算し、その結果を浮動小数点変数に格納します。整数の除算値浮動小数点値を返す

img.width=2620 refsize.width=1499 

KX変数は通常の数学によって~1.747831887925284を返す必要があり、問題のインスタンスを取る

float kx=(float)(img.Width/refsize.Width); 

。なぜ、この出来事は

しかし、それは整数kx=1

にそれを丸め続けているのですか?

+1

除算で浮動小数点数を明示的に指定する必要があります。そうでなければ整数除算になります – dcg

+0

@dcgありがとう..... – techno

答えて

1

これは

float kx=(float)(img.Width/refsize.Width); 

最初の操作のためにダウンしていてみフロートに(整数1である)

img.Width/refsize.Width 

は、結果をキャスト評価します。

期待通りの結果を得るには、除算の前に両方の幅を浮動小数点にキャストします(技術的にはどちらか一方をキャストでき、コンパイラはもう一方を宣言しますが、明示的にすることをお勧めします。道路)。

float kx=(float)img.Width/(float)refsize.Width; 
1
float kx=(img.Width/(float)refsize.Width); 

あなたは2つのintを分割し、その結果を使用して、整数または(DivideByZeroException)である整数もし最初の分割整数ので、それが起こる

0

を浮上さキャストint型であるため、これが起こります。そして、整数結果をfloatに変換します。

float kx = (((float)img.Width)/refsize.Width);

0

括弧は優先権を持っているので、あなたは整数整数で割っているとあなたは正しい結果を得るために

float kx = (float)img.Width/(float)refsize.Width; 

を書く必要があります。1.あなたはなります。

関連する問題