我需要从去除尾随零BigDecimal沿RoundingMode.HALF_UP。例如,
BigDecimal
RoundingMode.HALF_UP
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() 可以,但是在诸如此类的情况下,它会返回科学计数法,
stripTrailingZeros()
new BigDecimal("600.0").setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
在这种情况下,它返回6E+2。我需要在JSF中的自定义转换器中使用它,这对于最终用户可能很难看。那么,这样做的正确方法是什么?
6E+2
用 toPlainString()
toPlainString()
BigDecimal d = new BigDecimal("600.0").setScale(2, RoundingMode.HALF_UP).stripTrailingZeros(); System.out.println(d.toPlainString()); // Printed 600 for me
我还没有进入JSF,但转换器可能看起来像这样:
@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(); } }
然后在xhtml中:
<h:inputText id="bigDecimalView" value="#{bigDecimalObject}" size="20" required="true" label="Value"> <f:converter converterId="bigDecimalPlainDisplay" /> </h:inputText>