[英]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.