Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing trailing zeros from BigDecimal in Java

I need to remove trailing zeros from BigDecimal along with RoundingMode.HALF_UP. For instance,

Value        Output  15.3456  <=> 15.35 15.999   <=> 16            //No trailing zeros. 15.99    <=> 15.99 15.0051  <=> 15.01 15.0001  <=> 15           //No trailing zeros. 15.000000<=> 15           //No trailing zeros. 15.00    <=> 15           //No trailing zeros. 

stripTrailingZeros() works but it returns scientific notations in situations like,

new BigDecimal("600.0").setScale(2, RoundingMode.HALF_UP).stripTrailingZeros(); 

In this case, it returns 6E+2. I need this in a custom converter in JSF where it might be ugly for end users. So, what is the proper way of doing this?

like image 569
Tiny Avatar asked Jul 21 '13 09:07

Tiny


People also ask

How do I remove trailing zeros from BigDecimal?

stripTrailingZeros() is an inbuilt method in Java that returns a BigDecimal which is numerically equal to this one but with any trailing zeros removed from the representation. So basically the function trims off the trailing zero from the BigDecimal value.

How do you remove leading and trailing zeros in Java?

Java For Testers The replaceAll() method of the String class accepts two strings representing a regular expression and a replacement String and replaces the matched values with given String. The ^0+(?! $)"; To remove the leading zeros from a string pass this as first parameter and “” as second parameter.


1 Answers

Use toPlainString()

BigDecimal d = new BigDecimal("600.0").setScale(2, RoundingMode.HALF_UP).stripTrailingZeros(); System.out.println(d.toPlainString()); // Printed 600 for me 

I'm not into JSF (yet), but converter might look like this:

@FacesConverter("bigDecimalPlainDisplay") public class BigDecimalDisplayConverter implements Converter {     @Override     public Object getAsObject(FacesContext context, UIComponent component, String value) {         throw new BigDecimal(value);     }      @Override     public String getAsString(FacesContext context, UIComponent component, Object value) {         BigDecimal  bd = (BigDecimal)value;         return bd.setScale(2, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString();     } } 

and then in xhtml:

<h:inputText id="bigDecimalView" value="#{bigDecimalObject}"      size="20" required="true" label="Value">     <f:converter converterId="bigDecimalPlainDisplay" /> </h:inputText> 
like image 72
Adrian Adamczyk Avatar answered Oct 19 '22 09:10

Adrian Adamczyk