繁体   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