これが素朴な質問なら許してください、しかし今日私は途方に暮れています。
次のような単純な除算計算があります。
double returnValue = (myObject.Value / 10);
値はオブジェクトのintです。
分数が失われる可能性があるというメッセージが表示されます。ただし、doubleをintに変更すると、メッセージは消えます。
なぜこれが起こるのかについての考えはありますか?
2つのintを浮動小数点値に分割すると、小数部分は失われます。アイテムの1つをフロートにキャストすると、このエラーは発生しません。
たとえば、10を10.0に変えます
double returnValue = (myObject.Value / 10.0);
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;
整数を整数で除算すると、整数が返されます。 Valueをdoubleにキャストするか、10.0で除算します。
仮定して myObject.Value
はint
、方程式myObject.Value / 10
は整数の除算で、倍精度にキャストされます。
つまり、myObject.Valueが12の場合、returnValueは1になりますnot 1.2。
最初に値をキャストする必要があります。
double returnValue = (double)(myObject.Value) / 10.0;
これにより、正しい値1.2が得られます。少なくとも、doubleが制限を与えれば許されるのと同じくらい正確ですが、それはSOの他の場所でほぼ無限に議論されています:-)。
MyObjectはintであるため、
double returnValue=(myObject.Value/10.0);