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; }
в качестве альтернативы, я думаю, стоит упомянуть, что поведение методов 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().
есть статическая константа, которая представляет 0:
BigDecimal.ZERO.equals(selectPrice)вы должны сделать это вместо:
selectPrice.equals(BigDecimal.ZERO)во избежание случая, когда
selectPriceиnull.
Comments