我在计算机科学课的练习测试中发现了这个问题:
double num1 = 10;
double num2 = 0;
for (int i = 0; i < 50; i++)
{
num2 += .2;
}
System.out.println(num1 == num2);
System.out.println(num1 / num2 == 1);
System.out.println(num1 - num2 == 0);
a)真实的真实 b)真假假 c)假真假 d)假假真实 e)虚假虚假
正确答案是e。如果您在结尾打印num2
,则会获得9.999999999999996
。我怎么知道这个?
答案 0 :(得分:1)
0.2无法准确表示为IEEE 745浮点数,这是Java用于float和double的。可以精确表示的唯一非整数浮点数是2的幂,例如:
1/2
1/4
3/4
3/16
无法将0.2(即2/10
或1/5
)完全表示为双精度。测试人员希望你知道这一点。
0.2(十进制)是0.0011001100110011 ...二进制(0011,或3/16
无休止地重复)。
(没有办法用十进制数字来表示1/3
或1/7
,这是同样的问题。)
答案 1 :(得分:0)
您可以使用IEEE 754浮点标准来计算值。
&#39; double&#39;的Java规范原始类型是here