9

Java では、暗黙的に int を float に変換できます。これにより、以下のコード例に示すように、精度が失われる可能性があります。

public class Test {
    public  static void main(String [] args) {
        int intVal = 2147483647;
        System.out.println("integer value is " + intVal);
        double doubleVal = intVal;
        System.out.println("double value is " + doubleVal);
        float floatVal = intVal;
        System.out.println("float value is " + floatVal);
        }
}

出力は

integer value is 2147483647
double value is 2.147483647E9
float value is 2.14748365E9

精度が失われた場合に int から float への暗黙的な変換を許可する理由は何ですか?

4

2 に答える 2

7

あなたはおそらく疑問に思っています:

情報が失われたときに、これが暗黙の変換であるのはなぜですか?これは明示的な変換ではありませんか?

そしてもちろん、あなたには良い点があります。しかし、言語設計者は、ターゲットタイプの範囲が十分に大きい場合、精度が低下する可能性がある場合でも、暗黙的な変換が許可されると判断しました。重要なのは範囲であり、精度ではないことに注意してください。floatはintよりも範囲が広いため、暗黙の変換です。

Java仕様では、次のように述べられています。

intまたはlong値をfloatに、またはlong値をdoubleに変換すると、精度が低下する可能性があります。つまり、値の最下位ビットの一部が失われる可能性があります。この場合、結果の浮動小数点値は、IEEE 754の最も近い丸めモードを使用して、整数値の正しく丸められたバージョンになります。

于 2012-08-10T20:05:48.847 に答える
1

整数型を同じビット数を使用する浮動小数点型に変換すると、精度が失われる可能性がありますが、自動的に変換されます。「精度の低下」とは、重要度の低い桁の一部がゼロになる可能性があることを意味しますが、最も重要な桁と数値のサイズはそのまま残ります。float の精度は 10 進数で約 7 桁しかないことを思い出してください。たとえば、int 123456789 を float 123456700.0 に変換すると、精度が失われます。

于 2020-07-26T01:16:33.120 に答える