2

我正在计算 java 中变量的值是否等于 0.00 ,当前定义为大十进制。

I have tried a variety of ways to do this including:
tempListPrice.getAmount() == 0.00;

tempListPrice.getAmount().equals(0.00);

public static final zeroed = 0.00
tempListPrice.getAmount().equals(zeroed); 

请记住,我已经做了很多谷歌搜索,试图找到一种简单的方法来比较这个。如何比较 的值tempListPrice以查看它是否等于0.00,这在前面定义为 a big decimal datatype

我该怎么做呢?(对不起,我对 Java 很陌生)。

谢谢

4

3 回答 3

8

好的,经过进一步研究,您将需要 equals 或 compareTo。你可能想要

tempListPrice.getAmount().compareTo(BigDecimal.ZERO);

或者

tempListPrice.getAmount().equals(BigDecimal.ZERO);

但老实说,需要决定哪个更适合您的程序的语义。请记住,这很棘手的原因是因为浮点数实际上并没有完全相等的概念,它们本质上是模糊的、近似的实体。您需要仔细检查您的代码,以确保这对您的情况有效。

无论如何,Javadoc 中的以下几点应该足以让您决定:

(equals) 将此 BigDecimal 与指定的 Object 进行比较是否相等。与 compareTo 不同,此方法仅当两个 BigDecimal 对象的值和比例相等时才认为它们相等(因此,通过此方法进行比较时,2.0 不等于 2.00)。

参看。

(compareTo) 将此 BigDecimal 与指定的 BigDecimal 进行比较。此方法认为两个值相等但比例不同(如 2.0 和 2.00)的 BigDecimal 对象是相等的。此方法优先于六个布尔比较运算符(<、==、>、>=、!=、<=)中的每一个的单独方法提供。执行这些比较的建议习惯用法是:(x.compareTo(y) 0),其中 是六个比较运算符之一。

于 2012-09-28T19:38:11.523 回答
2
BigDecimal val = new BigDecimal("0.00");

BigDecimal test = new BigDecimal("0.00");

boolean isEqual = val.equals(test);

System.out.println("val " + val.toString() + " test " + test + " comp = " + isEqual);

输出

val 0.00 测试 0.00 comp = true

BigDecimal val = new BigDecimal("0.000");

BigDecimal test = new BigDecimal("0.00");

boolean isEqual = val.equals(test);

System.out.println("val " + val.toString() + " test " + test + " comp = " + isEqual);

输出

val 0.000 测试 0.00 comp = 假

于 2012-09-28T19:44:18.540 回答
0

正如先前的答案所指出的,您需要确保所描述的方法满足您的要求。如果,正如变量名所暗示的那样,您将货币金额与零进行比较,则另一种方法可能是将金额存储为两个 int 变量,如下所示(假设为美元,但可以是任何其他货币):

public boolean isZero (int dollars, int cents) {
    return (dollars == 0 && cents == 0);
}

简而言之,您的目的是否需要 BigDecimal 变量?

于 2012-09-30T16:17:32.250 回答