Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java float和double的值不同_Java - Fatal编程技术网

Java float和double的值不同

Java float和double的值不同,java,Java,我不明白为什么浮点值不同于双精度值。从下面的示例中可以看出,对于相同的操作,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提供的结果与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);
    }
}
输出:

199999.45
199999.44
12.666429
12.666428727762776

你能解释一下浮点和双精度的区别吗?

双精度是浮点精度的两倍。因此,它们的舍入误差较小


浮点数(通常)有32位,双64位(通常也是)。因此,浮点数的舍入误差大于双倍数

浮点是32位IEEE 754浮点

double是64位IEEE 754浮点

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


浮点数的精度低于双精度浮点数

大约是原来的一半——23比特对52比特是双倍的(非常感谢Skeet先生!)

…记住,“float”一词的字母数少于“double”,这是一个“记忆”技巧:)

你能解释一下浮点和双精度的区别吗

当然。假设您有两种十进制类型,一种是五位有效数字,另一种是十位有效数字

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

对于
float
double
,这两种类型都是二进制浮点类型,但是
double
float
具有更高的精度

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);
    }
}
输出:

199999.45
199999.44
12.666429
12.666428727762776

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

其他人说的,但在你的具体情况下,结果比浮点数可能的有效位数还要宽(cfr wikipedia,7.2位)-请参阅thx所有关于你的提示,这些维基文章都很有趣,而不是“一半”-A
float
只有23位精度,而
double
有52个。尾数大小并不是与总大小成比例的。Java中的+1 float总是32位,double总是64位。+1是一个更好的例子<代码>一个有6位有效数字,一个有16位有效数字