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? 在这两种情况下,你都试图接近一个你无法准确表达的数字 – 但你不会得到相同的价值,是吗?
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); } }
输出:
12.666429 12.666428727762776
float可以处理大约7位小数。 双精度可以处理大约16位小数。
双打的精度是浮子的两倍。 因此,它们具有较小的舍入误差。
浮点数(通常)为32位,双64位(通常为)。 因此,浮点数的数量多于双数的舍入误差。
浮点数的精度低于双精度数。
它大概只有一半 – 23位,52倍双倍(非常感谢Skeet先生!)!
浮点数为32位,双精度数为64位。 …请记住,“浮动”一词比“双”更少,这是一个“记忆”技巧:)