Java 为什么我的BigDecimal 0.0000不等于BigDecimal.0?
我在Android Java中得到了以下表达式:Java 为什么我的BigDecimal 0.0000不等于BigDecimal.0?,java,android,bigdecimal,Java,Android,Bigdecimal,我在Android Java中得到了以下表达式: myVar + " == 0 ? " + BigDecimal.ZERO.equals(myVar) 其输出如下: 0.0000 == 0 ? false 其中myVar声明为: public BigDecimal myVar; 并成功地分配了,来自所服务的JSON数据(我检查了这个以验证JSON是好的)。 为什么0.0000作为BigDecimal不等于BigDecimal.ZERO?来自: 如果x是一个BigDecimal实例,并且此实
myVar + " == 0 ? " + BigDecimal.ZERO.equals(myVar)
其输出如下:
0.0000 == 0 ? false
其中myVar
声明为:
public BigDecimal myVar;
并成功地分配了,来自所服务的JSON数据(我检查了这个以验证JSON是好的)。
为什么0.0000
作为BigDecimal
不等于BigDecimal.ZERO
?来自:
如果x是一个BigDecimal实例,并且此实例等于此大小数,则返回true。如果两个大小数的无标度值和标度相等,则它们相等。例如,1.0(10*10-1)不等于1.00(100*10-2)。同样,如果零实例的比例不同,则零实例也不相等
他们为什么决定这样做?可能是因为它更容易实现。这是个好决定吗?我不这么认为,但事实就是这样。如果您不喜欢,请使用另一个库。中给出的一个解决方案是使用compareTo
。因此,您可以将代码更改为
myVar + " == 0 ? " + (BigDecimal.ZERO.compareTo(myVar) == 0)
但是请发布初始化/设置
myVar
值的代码myVar
是从我们的自定义JSON反序列化程序分配的。“所有相关的代码”最终会变成成千上万行,即使我被允许披露,你也不想读。重复这一点使我想扩展bigdecime
并添加类似equalsIgnoreScale