1

私は上記のコードを持っています

private float farenaitCelsiusMath(float f) {

        float result;
        result = (f-1)*(2/3);
        return result;
    }

エミュレーターでアプリを実行すると、fにどのような値を指定しても0と評価されます。

しかし、その3行目がresult = (f-1)*2/3;正しく評価されたとき。

なぜそれが起こるのですか?Javaの算術式について知っておくべきことはありますか?

4

1 に答える 1

3

(2/3)は INTEGER 除算であり、整数除算は切り捨てられるため 0 に評価されます。

  • (f-1)FLOATfなのでFLOATです
  • (2/3)整数除算は切り捨てられるため、INTEGER 値は 0 です。
  • (f-1)*(2/3)は FLOAT で(f-1)あるため FLOAT であり、0 を掛けたものはすべて 0 であるため、値は 0 です。

そのとき、それは次の(f-1)*2/3ように評価されます

  • (f-1)は FLOAT でfあるため、FLOAT です。
  • (f-1)*2は FLOAT なので (f-1)は FLOAT
  • (f-1)*2/3FLOAT(f-1)*2なのでFLOATです

期待どおりの結果を得るには、それを作成する(2./3)(2/3.)、小数点のために両方とも FLOAT に昇格するか、キャストで明示的にすることをお勧めし((float)2/(float)3)ます。これは実行時にコストがかからず、すべてコンパイラーによって行われます。

于 2012-02-03T19:39:13.923 に答える