分数の損失の可能性


119

これがナイーブな質問なら許してください。しかし、今日は途方に暮れています。

私は次のような単純な除算を持っています:

double returnValue = (myObject.Value / 10);

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

分数損失の可能性があるというメッセージが表示されます。しかし、doubleをintに変更すると、メッセージは消えます。

これがなぜ起こるかについての考えはありますか?


素晴らしい回答をありがとうございました。これで、2つのint値を除算すると小数点が失われるようになりました。
CodeLikeBeaker 2009年

回答:


168

2つのintを浮動小数点値に分割すると、小数部分は失われます。アイテムの1つをフロートにキャストしても、このエラーは発生しません。

たとえば、10を10.0に変換します

double returnValue = (myObject.Value / 10.0);

57

myObject.Value両側/が整数型であるため、がintの場合は整数除算を行っています。

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

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;

7

整数を整数で割ると、整数が返されます。いずれかの値をdoubleにキャストするか、10.0で除算します。


7

それmyObject.Valueがであると仮定するとint、方程式myObject.Value / 10は整数除算になり、次にdoubleにキャストされます。

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

最初に値をキャストする必要があります:

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

これにより、正しい値1.2が得られます。少なくともdoubleが制限を許可するのと同じくらい正確ですが、SOの他の場所でほぼ無限に説明されています:-)。


4

myObjectはintなので、

double returnValue=(myObject.Value/10.0); 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.