Как проверить, если BigDecimal переменная == 0 в java?



У меня есть следующий код в Java;



BigDecimal price; // assigned elsewhere

if (price.compareTo(new BigDecimal("0.00")) == 0) {
return true;
}


каков наилучший способ написать условие if?

857   8  

8 ответов:

использовать compareTo(BigDecimal.ZERO) вместо equals():

if (price.compareTo(BigDecimal.ZERO) == 0) // see below

по сравнению с BigDecimal постоянный BigDecimal.ZERO позволяет построить new BigDecimal(0) каждого исполнения.

к твоему сведению,BigDecimal также константы BigDecimal.ONE и BigDecimal.TEN для вашего удобства.


внимание!

причина, по которой вы не можете использовать BigDecimal#equals() это берет масштаб внимание:

new BigDecimal("0").equals(BigDecimal.ZERO) // true
new BigDecimal("0.00").equals(BigDecimal.ZERO) // false!

так что это непригодно для чисто числового сравнения. Однако,BigDecimal.compareTo() не учитывает масштаб при сравнении:

new BigDecimal("0").compareTo(BigDecimal.ZERO) == 0 // true
new BigDecimal("0.00").compareTo(BigDecimal.ZERO) == 0 // true

кроме того, signum () можно использовать в:

if (price.signum() == 0) {
    return true;
}

есть константа, которую вы можете проверить против:

someBigDecimal.compareTo(BigDecimal.ZERO) == 0

обычно я использую следующее:

if (selectPrice.compareTo(BigDecimal.ZERO) == 0) { ... }

в качестве альтернативы, я думаю, стоит упомянуть, что поведение методов equals и compareTo в классе BigDecimal не согласуются друг с другом.

Это означает, что:

BigDecimal someValue = new BigDecimal("0.00");
System.out.println(someValue.compareTo(BigDecimal.ZERO)==0); //true
System.out.println(someValue.equals(BigDecimal.ZERO)); //false

поэтому вы должны быть очень осторожны с масштабом в someValue переменной, в противном случае вы получите неожиданный результат.

вы хотели бы использовать equals (), так как они являются объектами, и использовать встроенный нулевой экземпляр:

if(selectPrice.equals(BigDecimal.ZERO))

отметим, что .equals() учитывает масштаб, поэтому, если selectPrice не является тем же масштабом (0), что и .ZERO тогда это вернет false.

принять данные из уравнения, как это было:

if(selectPrice.compareTo(BigDecimal.ZERO) == 0)

Я должен отметить, что для некоторых математических ситуаций, 0.00 != 0, вот почему я представляю .equals() принимает данные во внимание. 0.00 дает точность до сотого места, тогда как 0 это не уточняет. В зависимости от ситуации вы можете придерживаться .equals().

BigDecimal.ZERO.setScale(2).equals(new BigDecimal("0.00"));

есть статическая константа, которая представляет 0:

BigDecimal.ZERO.equals(selectPrice)

вы должны сделать это вместо:

selectPrice.equals(BigDecimal.ZERO)

во избежание случая, когда selectPrice и null.

Comments

    Ничего не найдено.