float和double的不同值

Geo*_*e D 14 java

我不明白为什么浮点值与double值不同.从下面的示例可以看出,float为同一操作提供的结果与double不同:

public class Test {

    public static void main(String[] args) {
        double a = 99999.8d;
        double b = 99999.65d;
        System.out.println(a + b);

        float a2 = 99999.8f;
        float b2 = 99999.65f;
        System.out.println(a2 + b2);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

199999.45
199999.44
Run Code Online (Sandbox Code Playgroud)

你能解释一下浮动和双重之间的差异吗?

Ros*_*son 25

浮点数是32位IEEE 754浮点数.

双精度是64位IEEE 754浮点.

所以这只是一个精度问题,因为分数部分.8和.65都没有终止二进制表示,所以存在一些舍入误差.double具有更高的精度,因此它的舍入误差略小.

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html


Jon*_*eet 14

你能解释一下浮动和双重之间的差异吗?

当然.想象一下,你有两个小数类型,一个有五位有效数字,一个有十位数.

您将使用什么价值来表示每种类型的pi?在这两种情况下,你都试图接近一个你无法准确表达的数字 - 但你最终会得到相同的价值,不是吗?

对于floatdouble- 它们都是二进制浮点类型,但double具有更高的精度float.


Tha*_*ani 11

public class Main {

    public static void main(String[] args) {
        float  a=12.6664287277627762f;
        double b=12.6664287277627762;

        System.out.println(a);
        System.out.println(b);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

12.666429
12.666428727762776
Run Code Online (Sandbox Code Playgroud)

float可以处理大约7位小数.双精度可以处理大约16位小数.


jho*_*yla 5

双打的精度是浮子的两倍.因此,它们具有较小的舍入误差.

浮点数(通常)为32位,双64(通常为).因此浮点数的数量多于双数的舍入误差.

  • Java float中的+1始终为32位,double始终为64位. (4认同)