java float 向double 隐式转换精度丢失
天蓬老师
天蓬老师 2017-04-18 09:18:28
0
2
821

java float 向double 隐式转换精度会有丢失

    float f = 8.69f;
    int a = Float.floatToIntBits(f);
    String floatStr = Integer.toBinaryString(a);

    double d1 = f;
    long b = Double.doubleToLongBits(d1);
    String convertStr = Long.toBinaryString(b);

    double d2 = 8.69d;
    long c = Double.doubleToLongBits(d2);
    String doubleStr = Long.toBinaryString(c);

    System.out.println(floatStr);
    System.out.println(convertStr);
    System.out.println(doubleStr);

输出为
1000001000010110000101000111101 100000000100001011000010100011110100000000000000000000000000000 100000000100001011000010100011110101110000101000111101011100001

想问下,为什么在隐式转换的过程中,jvm只是单纯的拷贝float中的尾数部分,然后补0,而不是精确的计算尾数部分的值?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(2)
左手右手慢动作

仮数に 0 を加算するときに精度が失われることはありません。これが浮動小数点数の表現方法です

いいねを押す +0
洪涛

Float は 4 バイトを占有しますが、Double は 8 バイトを占有します。
メモリ コピー プロセス中、4 バイトのみがコピーされ、残りのバイトはデフォルトで 0 になります (リリース モードでは、これはデバッグ モードでは必ずしも当てはまりません)。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!