2009-06-30 8 views
100

これは純粋な質問である場合は私に許してください、しかし、私は今日失っています。分数損失の可能性があります

Iのような単純な除算演算を持っているが、以下:

double returnValue = (myObject.Value/10); 

値は、オブジェクトのintです。

Possible Loss of Fractionというメッセージが表示されます。しかし、doubleをintに変更すると、メッセージは消えます。

これがなぜ起こるのかについての考えはありますか?あなたは浮動小数点値に2 int型のを分割するとき、私はmyObjectということから考える

+0

ありがとうございました。 2つのint値を分割するとき、小数点を失うことになります。 – CodeLikeBeaker

答えて

138

小数部分が失われている必要があります。アイテムの1つを浮動小数点型にキャストすると、このエラーは発生しません。 /の両側が整数型であるため、

したがって、たとえば、myObject.Valueがintである場合は、整数の除算をやっている10.0

double returnValue = (myObject.Value/10.0); 
3

がintである、あなたは

double returnValue=(myObject.Value/10.0); 
51

に10を回します。

浮動小数点除算を行うには、式の数値の1つが浮動小数点型でなければなりません。 myObject.Valueがdoubleまたは以下のいずれかである場合はtrueです。

double returnValue = myObject.Value/10.0; 
double returnValue = myObject.Value/10d; //"d" is the double suffix 
double returnValue = (double)myObject.Value/10; 
double returnValue = myObject.Value/(double)10; 
6

整数を整数で返します。 Valueをdoubleにキャストするか、10.0で除算します。

6

myObject.Valueintであると仮定すると、式myObject.Value/10は、2進数にキャストされる整数除算になります。

つまり、myObject.Valueが12の場合、returnValueは1になり、ではなく、 1.2になります。

あなたが最初の値(複数可)をキャストする必要があります。

double returnValue = (double)(myObject.Value)/10.0; 

これは、ダブルスはほとんど、自分の限界を与えられたことができますが、それはSO上の他の場所で議論だと少なくとも同じ正しい正しい値1.2、につながります無限に:-)。

関連する問題