我不明白为什么浮点值与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
你能解释浮动和双重之间的区别吗?
答案 0 :(得分:24)
浮点数是32位IEEE 754浮点数。
double是64位IEEE 754浮点。
所以这只是一个精度问题,因为小数部分.8和.65都没有终止二进制表示,所以存在一些舍入误差。 double具有更高的精度,因此它的舍入误差略小。
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
答案 1 :(得分:14)
你能解释浮动和双重之间的区别吗?
不确定。想象一下,你有两个十进制类型,一个有五位有效数字,一个有十位数。
您将使用什么价值来表示每种类型的pi?在这两种情况下,你都试图接近一个你无法代表完全的数字 - 但你不会得到相同的价值,不是吗?
float
和double
也是如此 - 两者都是二进制浮点类型,但double
的精度高于float
。
答案 2 :(得分: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);
}
}
输出:
12.666429
12.666428727762776
float可以处理大约7位小数。双精度数可以处理大约16位小数。
答案 3 :(得分:5)
双打的精度是浮子的两倍。因此,它们具有较小的舍入误差。
浮点数(通常)为32位,双64位(通常为)。因此浮点数的数量多于双数的舍入误差。
答案 4 :(得分:1)
浮点数的精度低于双精度数。
它大约只有一半 - 23位,而52则是双倍(非常感谢Skeet先生!)!
32-bit for floats, 64-bit for doubles. ...请记住,“float”这个词的字母数少于“double”,这是一个“记忆”技巧:)