Rounding BigDecimal to *always* have two decimal places
245,324
value = value.setScale(2, RoundingMode.CEILING)
Related videos on Youtube
Author by
Brad Mace
Java and Perl programmer. I also use PHP but I'm trying to quit, honest.
Updated on July 08, 2022Comments
-
Brad Mace almost 2 years
I'm trying to round BigDecimal values up, to two decimal places.
I'm using
BigDecimal rounded = value.round(new MathContext(2, RoundingMode.CEILING)); logger.trace("rounded {} to {}", value, rounded);
but it doesn't do what I want consistently:
rounded 0.819 to 0.82 rounded 1.092 to 1.1 rounded 1.365 to 1.4 // should be 1.37 rounded 2.730 to 2.8 // should be 2.74 rounded 0.819 to 0.82
I don't care about significant digits, I just want two decimal places. How do I do this with BigDecimal? Or is there another class/library better suited to this?
-
Gilbert Le Blanc about 11 yearsIf you actually want to round, you would use RoundingMode.HALF_UP
-
-
Brad Mace about 11 yearsThat does indeed work how I want. Is the difference simply that
round()
works with significant digits whilesetScale
works with a fixed number of decimal places or is there more to it? -
Grzegorz Dev over 7 yearsUse RoundingMode.HALF_UP to do "typcal rounding". That is 1.111 gives 1.11 [CEILING gives 1.12]
-
silver almost 7 yearsThanks for
RoundingMode.HALF_UP
. As per documentation it is the rounding method commonly taught in schools - what I needed. -
Dale about 6 yearsTake care if your values can be negative as in an accounting application. You may need to use RoundingMode.UP instead of CEILING
-
Jason Law over 4 yearsWhy does
setScale(...)
work? see BigDecimal setScale and round.