我听说double
是一种更精确的数据类型,我希望看到double
的结果
在以下程序的帮助下,但每次相似但不精确到float
时,它仍会给出可变结果
float
和double
之间的区别是什么?何时实时使用它们?
任何机构都可以用简单的术语解释这种情况
并指明这种行为的原因?
在此先感谢:)
public class DoubleResult {
public static void main(String[] args) {
double number=1;
for(int i=0;i<5;i++){
number=number+0.1;
System.out.println(number);
}
}
}
输出:
1.1
1.2000000000000002
1.3000000000000003
1.4000000000000004
1.5000000000000004
答案 0 :(得分:1)
float
和double
都是浮点数。 float
是单精度(32位)浮点,而double
是双精度(因此名称)(64位)
Name Width in Bits Range
double 64 1.7e–308 to 1.7e+308
float 32 3.4e–038 to 3.4e+038
您可以看到this answer以获得有关浮点精度问题的更准确描述
答案 1 :(得分:0)
计算机的浮点单元与基数2二进制一起工作,0.2不能精确地用二进制表示,它被称为转发器分数。在base-2中,只有具有2的幂的分母的数字终止,我认为只有.25,。50和.75,这就是为什么6.5显示为&#34;相同&#34;。
想象一下,你有两个十进制类型,一个有六位有效数字,一个有十六位。
您将使用什么价值来表示每种类型的pi?在这两种情况下,你都试图接近一个你无法准确表示的数字 - 但你不会得到相同的价值,不是吗?
浮点数(32位)和双精度(64位)相同 - 都是二进制浮点类型,但double比float更精确。所以,如果你需要精确度,那就选择双倍。
有关详细信息,请参阅this