Is 1.0 equals 1.00?

If you use BigDecimal for floating point numbers, you may want to compare them by equals. But beware: BigDecimal.equals takes value and scale into acount, when comparing two BigDecimal values:

BigDecimal one_0 = new BigDecimal(„1.0“);

BigDecimal one_00 = new BigDecimal(„1.00“);

one_0.equals(one_00) // false!

For comparing BigDecimal values regardless of their scale you can use compareTo:

one_0.compareTo(one_00) == 0 // true

The same applies to JUnit test assertions for BigDecimal values: Using  org.junit.Assert.assertEquals or org.hamcrest.Matcher.is take the scale of BigDecimal values into account. Use org.hamcrest.number.OrderingComparison.comparesEqualTo instead for comparing the values only.

Advertisements

Über Dirk Weil
Dirk Weil ist seit 1998 als Berater im Bereich Java tätig. Als Geschäftsführer der GEDOPLAN GmbH in Bielefeld ist er für die Konzeption und Realisierung von Informationssystemen auf Basis von Java EE verantwortlich. Seine langjährige Erfahrung in der Entwicklung anspruchsvoller Unternehmenslösungen machen ihn zu einem kompetenten Ansprechpartner und anerkannten Experten auf dem Gebiet Java EE. Er ist Autor in Fachmagazinen, hält Vorträge und leitet Seminare und Workshops aus einem eigenen Java-Curriculum.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: