簡體   English   中英

Java float vs雙精度

[英]Java float vs double precision

public class MyClass {
    public static void main(String args[]) {
        float x=2.0f;
        float y=1.1f;

        System.out.println("Float = " + (x - y));

        double a=2.0d;
        double b=1.1d;

        System.out.println("Double = " + (a - b));
    }
}

回答:

Float = 0.9
Double = 0.8999999999999999

我知道如果我想提高精度,應該使用BigDecimal ,但是為什么float (與double相比精度較低的32位)不會遇到舍入問題?

我修改了代碼以在四舍五入后的值后立即打印每個結果的確切值:

Float = 0.9
0.89999997615814208984375
Double = 0.8999999999999999
0.899999999999999911182158029987476766109466552734375

雙精度結果遠比浮點數更接近0.9。 這些是在任何其他計算中將使用的值。

打印輸出的差異是Float和Double toString方法的結果。 每個目標都旨在產生最短的結果,該結果在轉換回相應的類型時將產生原始值。 0.9將在浮點解析時轉換為0.89999997615814208984375。 在雙重解析時,它將轉換為0.90000000000000002220446049250313080847263336181640625。 比浮點數需要更多的位數來唯一地標識雙精度數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM