我有两个双重值.我想检查两个double值是否相同.我有两种比较这个双值的方法.
第一种方式:
double a = 0.1;
double b = 0.2;
if(a == b) {
System.out.println("Double values are same");
}
Run Code Online (Sandbox Code Playgroud)
另一种比较方式:
if(Double.compare(a, b) == 0) {
System.out.println("Double values are same");
}
Run Code Online (Sandbox Code Playgroud)
哪一种最好的方法又准确?比较双值是否两种方式相同?
Double.compare处理NaN和负零的情况不同于==.因为Double.compare,-0.0d不等于0.0d.
例如,以下代码:
public static void main(String... args) {
double a = -0.0d;
double b = 0.0d;
if (a == b) {
System.out.println("a == b");
}
if (Double.compare(a, b) == 0) {
System.out.println("Double.compare(a, b) == 0");
}
}
Run Code Online (Sandbox Code Playgroud)
只会打印a == b.
因此,这两个操作不相同.使用一个而不是另一个取决于您的要求.
关于==(和!=)的确切规则可以在JLS 第15.21.1节中找到:
根据IEEE 754标准的规则执行浮点相等性测试:
如果任一操作数是NaN,则==的结果为false,但!=的结果为true.实际上,当且仅当x的值是NaN时,测试x!= x才为真.
正零和负零被认为是相等的.
否则,相等运算符认为两个不同的浮点值不相等.特别是,有一个值代表正无穷大,一个值代表负无穷大; 每个比较仅与自身相等,并且每个比较不等于所有其他值.
根据浮点数的这些注意事项,以下规则适用于整数操作数或NaN以外的浮点操作数:
- 如果左侧操作数的值等于右侧操作数的值,则==运算符生成的值为true.否则,结果是错误的.
- 如果左侧操作数的值不等于右侧操作数的值,则!=运算符生成的值为true.否则,结果是错误的.
| 归档时间: |
|
| 查看次数: |
22815 次 |
| 最近记录: |