==
Использование для сравнения двойников seems like a bad idea в целом.
Вы могли бы назвать setScale к тому же на номера вы сравниваете:
new BigDecimal ("5.50").setScale(2).equals(new BigDecimal("5.5").setScale (2))
, где вы бы установка масштаба к большему из двух:
BigDecimal a1 = new BigDecimal("5.051");
BigDecimal b1 = new BigDecimal("5.05");
// wow, this is awkward in Java
int maxScale = Collections.max(new ArrayList() {{ a1.scale(), b1.scale()}});
System.out.println(
a1.setScale(maxScale).equals(b1.setScale(maxScale))
? "are equal"
: "are different");
Использование compareTo() == 0
это лучший ответ. Увеличение масштаба одного из чисел в моем подходе выше, скорее всего, «ненужная инфляция», что метод документация compareMagnitude упоминает, когда он говорит:
/**
* Version of compareTo that ignores sign.
*/
private int compareMagnitude(BigDecimal val) {
// Match scales, avoid unnecessary inflation
long ys = val.intCompact;
long xs = this.intCompact;
и конечно compareTo
намного проще в использовании, поскольку это уже реализовано для вас.
Если ваши объекты BigDecimal гарантированно будут всегда представима двойников, то вы не должны использовать BigDecimal в любом случае. Если это не так, то этот метод будет терпеть неудачу. – DJClayworth
Плохое решение. Если двойники подходят для вашей программы, используйте удвоения. Если BigDecimals подходят, используйте BigDecimals. Почти никогда не бывает полезно конвертировать туда и обратно. – Jay
@DJClayworth: где вы видите «отредактированный» ярлык? – Roman