当前位置: 首页 > 面试题库 >

Java中等于零(BigDecimal / Double)的运算符

颜修为
2023-03-14
问题内容

一些有趣的发现wrt等于0和0.0上的运算符

  1. new Double(0.0).equals(0)返回false,而new Double(0.0).equals(0.0)返回true。

  2. BigDecimal.ZERO.equals(BigDecimal.valueOf(0.0))返回false,而BigDecimal.ZERO.equals(BigDecimal.valueOf(0))返回true。

看起来在两种情况下都完成了字符串比较。谁能对此有所启发。

谢谢。


问题答案:

BigDecimal“等于”比较值和小数位数。如果只想比较值(0 == 0.0),则应使用compareTo:

BigDecimal.ZERO.compareTo(BigDecimal.valueOf(0.0)) == 0 //true
BigDecimal.ZERO.compareTo(BigDecimal.valueOf(0)) == 0 //true

参见javadoc。

至于Double比较,如其他答案所述,您正在将Double与Integer进行比较new Double(0.0).equals(0),这false是因为对象具有不同的类型而返回。作为参考,JDK
7中equals方法
的代码为:

public boolean equals(Object obj) {
    return (obj instanceof Double)
           && (doubleToLongBits(((Double)obj).value) ==
                  doubleToLongBits(value));
}

就您而言,(obj instanceof Double)是错误的。



 类似资料:
  • 问题内容: 我必须计算一些浮点变量,而我的同事建议我使用而不是,因为这样会更精确。但是我想知道它是什么以及如何最大程度地利用它? 问题答案: 是表示数字的精确方法。A 具有一定的精度。由于幅值之差太大,求和时使用不同倍数(例如和)的双精度可能会导致它们一起下降。有了这不会发生。 的缺点是,它是较慢的,和它有点更难以程序算法的方式(由于不被过载)。 如果你要花钱,或必须精打细算,请使用。否则往往就足

  • 我读到BigDecimal.equals的Java博士说: 将此BigDecimal与指定的对象进行相等比较。与compareTo不同,此方法仅当两个BigDecimal对象的值和比例相等时才认为它们相等(因此,使用此方法进行比较时,2.0不等于2.00)。 但是当我测试它时,不知何故,我得到了意想不到的结果,并且等于。我认为出于同样的原因,当我把和放在中时,大小为1,而我期望大小为2。请看下面的

  • 问题内容: 和之间有什么区别? 问题答案: 假设的类型和是引用类型: 在Java中,将始终比较身份 -即两个值是否是对同一对象的引用。这也称为引用相等。Java没有任何用户定义的运算符重载。 在中,这取决于。除非有一个重载的运算符来处理它,否则==的行为类似于Java(即比较引用相等性)。但是,如果存在一个与and 的编译时类型匹配的重载(例如,如果它们都被声明为字符串),那么将调用该重载。这可以

  • 问题内容: 当存储通常为以下格式的纬度/经度时:44.087585(即,点和6dp前最多2个数字)我是否需要打扰大数位数? 问题答案: 使用double精度足以将纬度/经度降低至英寸,精确到6-7小数位。在航空中,如果使用小数位,则它们通常至少达到7个小数位。在我们的NASA模拟中,纬度/经度数据是双倍的,而所有其他姿态和高度都是浮点的。换句话说,海拔高度的小数点后第六位并不重要,而纬度/经度的小

  • 我读到BigDecimal.equals的Java博士说: 将此BigDecimal与指定的对象进行相等比较。与compareTo不同,此方法仅当两个BigDecimal对象的值和比例相等时才认为它们相等(因此,使用此方法进行比较时,2.0不等于2.00)。 但是当我测试它时,不知何故我得到了意想不到的结果,等于。我想,出于同样的原因,当我把和放在中时,大小为1,而我预期大小为2。请看下面的代码,

  • 问题内容: double not 运算符在PHP中做什么? 例如: 上面的代码会做什么? 问题答案: 这不是“ double not运算符”,它是两次应用的 not 运算符。 无论操作数如何, 该权利都将导致布尔值。然后左边将否定该布尔值。 __ 这意味着对于任何真值(非零的数字,非空字符串和数组等),您将获得布尔值,对于任何假值(0、0.0 、、空字符串或空数组),您将获得布尔值。 它在功能上等