BigDecimal formatting without any rounding

Hello All,

We have a requirement where we need to work with java.math.BigDecimal and format it in such a way so that the display would always have four decimal digits, appropriate commas and NO rounding up or down. Meaning,

Input            Output
1            1.0000
0.5            0.5000
0.0004             0.0004
0.00085            0.0008
1000            1,000.0000

We tried to format the big decimal with DecimalFormat("#,##0.0000") but there is some rounding on the decimal value i.e., if input is 0.00006 then the output is 0.0001 whereas it shoud be just 0.0000.

Any help on this would be must useful. Thanks.
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x

Commented:
Using the integer fields in this class (such as ROUND_HALF_UP) to represent rounding mode is largely obsolete; the enumeration values of the RoundingMode enum, (such as RoundingMode.HALF_UP) should be used instead.

So replace

ba = ba.setScale(4,BigDecimal.ROUND_DOWN);
bb = bb.setScale(4,BigDecimal.ROUND_DOWN);
bc = bc.setScale(4,BigDecimal.ROUND_DOWN);

by

ba = ba.setScale(4,RoundingMode.DOWN);
bb = bb.setScale(4,RoundingMode.DOWN);
bc = bc.setScale(4,RoundingMode.DOWN);

is same result.
0

Commented:
0

Commented:
Do you need 4 decimal places always unless it has more?  Or do you want the decimals to reflect the number like:

1
.5
23.455
2.0000005
0

Author Commented:
Like I said, we always require 4 decimal digits if the input has it or not. For example,

Input          Output
1                 1.0000
0.5              0.5000
0.0004         0.0004
0.00085       0.0008
1000            1,000.0000
0

Author Commented:
DecimalFormat("#,##0.0000") almost satisfies the requirement but there is some rounding on the decimal value i.e., if input is 0.00006 then the output is 0.0001 whereas it shoud be just 0.0000.
0

Commented:
BigDecimal ba = new BigDecimal(1000);
BigDecimal bb = new BigDecimal(0.5);
BigDecimal bc = new BigDecimal(0.00006);

DecimalFormat myFormat = new DecimalFormat("#,##0.0000");

ba = ba.setScale(4,BigDecimal.ROUND_DOWN);
bb = bb.setScale(4,BigDecimal.ROUND_DOWN);
bc = bc.setScale(4,BigDecimal.ROUND_DOWN);

System.out.println(myFormat.format(ba));
System.out.println(myFormat.format(bb));
System.out.println(myFormat.format(bc));

1.000,0000
0,5000
0,0000
0

Commented:
(I have 1.000,0000 and not 1,000.0000 according to my Locale (fr-BE))
0

Author Commented:
Thanks matthew016. Not sure whether you above solution will work for input like 1.9? Will the output be 1.9000?
0