【发布时间】:2020-09-25 20:17:26
【问题描述】:
我尝试使用 Double 类编写一个简单的代码来比较数字是否相等。这是我的简单代码:
BufferedReader bfr= new BufferedReader(new InputStreamReader(System.in));
Double number1;
Double number2;
System.out.println("Ask for first number:");
number1 = Double.parseDouble(bfr.readLine());
System.out.println("Ask for second number:");
number2 = Double.parseDouble(bfr.readLine());
if(number1==number2) {
System.out.println("These numbers are equals!");
System.out.println(number1);
System.out.println(number2);
}else {
System.out.println("They're differents!");
System.out.println(number1);
System.out.println(number2);
}
当我使用“int”而不是 Double 和运算符“==”时,它工作正常,但当我使用“Double”时,它显示它们是不同的数字,即使输入了相同的数字。我尝试使用 Object.equals() 方法,它工作正常,但我想知道为什么“Double”类不承认运算符“==”。
【问题讨论】:
-
十进制处理器不能精确表示浮点数,而只能近似地表示
-
我记得有一个 compare() 函数用于比较双精度数
-
@HovercraftFullOfEels:这实际上不是数值近似的问题。如果您解析
0.1两次,您将获得相同的double值。但是 OP 正在比较两个Double包装器对象的对象身份! -
@JoachimSauer:哎呀,我的错。然后需要
Double.compare(...)或Double#equals(...) -
@JoachimSauer:更好的副本:stackoverflow.com/questions/12226757/…
标签: java