为什么我的BigDecimal 0.0000不等于BigDecimal.ZERO?

Ben*_*ero 1 java android bigdecimal

我在Android Java中有以下表达式:

myVar + " == 0 ? " + BigDecimal.ZERO.equals(myVar)
Run Code Online (Sandbox Code Playgroud)

输出以下内容:

0.0000 == 0 ? false
Run Code Online (Sandbox Code Playgroud)

在哪里myVar声明:

public BigDecimal myVar;
Run Code Online (Sandbox Code Playgroud)

并且Gson从服务的JSON数据中成功分配(我检查了这个以验证JSON是否良好). 为什么0.0000作为一个BigDecimal不相等BigDecimal.ZERO

Gab*_*han 5

文档:

如果x是BigDecimal实例并且此实例等于此大小数,则返回true.如果未缩放的值和它们的比例相等,则两个大小数相等.例如,1.0(10*10 -1)不等于1.00(100*10 -2).同样,如果它们的比例不同,则零实例不相等.

他们为什么决定这个?可能是因为它更容易实现.这是一个好的决定吗?我不这么认为,但它就是这样.如果您不喜欢,请使用其他库.

  • 这让我想扩展“BigDecimal”并添加“equalsIgnoreScale”等方法 (2认同)