I am trying to format prices using DecimalFormat, but this isn't working for all variations.
DecimalFormat df = new DecimalFormat("0.##")
df.format(7.8)
df.format(85.0)
prints
7.80
and
85
but "7.79999" gets formatted as "7.8", not "7.80". I have tried doing things this way
DecimalFormat df = new DecimalFormat("0.00")
to force two dp, but then "85.0" gets formatted as "85.00" not "85"!
Is there a way of capturing all variations, so that prices are printed either as #, ##, or #.##? For example:
5, 55, 5.55, 5.50, 500, 500.40
Use the BigDecimal number class instead:
e.g. if n is a BigDecimal, then you can use
By the way, it's best practice to use BigDecimal when working with money.
There is a slight difference between these two formats. The "#.##" means it will print the number with maximum two decimal places whereas "#.00" means it will always display two decimal places and if the decimal places are less than two, it will replace them with zeros. see the example below with output.
And the output will be
This doesn't seem to be solved by a single
formatter
. I suggest you use"0.00"
format and replace".00"
with an empty string.This will print 5
This will print 500.40
I don't think it's possible, at least not with Java SE formatters. You need to make a custom formatter. I would do it like this