Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的BigDecimal 0.0000不等于BigDecimal.0?_Java_Android_Bigdecimal - Fatal编程技术网

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

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实例,并且此实

我在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实例,并且此实例等于此大小数,则返回true。如果两个大小数的无标度值和标度相等,则它们相等。例如,1.0(10*10-1)不等于1.00(100*10-2)。同样,如果零实例的比例不同,则零实例也不相等

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

中给出的一个解决方案是使用
compareTo
。因此,您可以将代码更改为

myVar + " == 0 ? " + (BigDecimal.ZERO.compareTo(myVar) == 0)

但是请发布初始化/设置
myVar
值的代码
myVar
是从我们的自定义JSON反序列化程序分配的。“所有相关的代码”最终会变成成千上万行,即使我被允许披露,你也不想读。重复这一点使我想扩展
bigdecime
并添加类似
equalsIgnoreScale