float和double的不同值

我不明白为什么浮点值与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); } } 

输出:

 199999.45 199999.44 

你能解释浮动和双重之间的区别吗?

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

双精度是64位IEEE 754浮点。

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

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

你能解释浮动和双重之间的区别吗?

当然。 想象一下,你有两个十进制类型,一个有五位有效数字,一个有十位数。

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

floatdouble也是一样的 – 都是二进制浮点类型,但doublefloat更精确。

 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); } } 

输出:

 12.666429 12.666428727762776 

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

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

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

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

它大概只有一半 – 23位,52倍双倍(非常感谢Skeet先生!)!

浮点数为32位,双精度数为64位。 …请记住,“浮动”一词比“双”更少,这是一个“记忆”技巧:)