在Java中从BigDecimal移除尾随零

我需要从去除尾随零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()

可以,但是在诸如此类的情况下,它会返回科学计数法,

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

在这种情况下,它返回6E+2。我需要在JSF中的自定义转换器中使用它,这对于最终用户可能很难看。那么,这样做的正确方法是什么?

回答:

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>

以上是 在Java中从BigDecimal移除尾随零 的全部内容, 来源链接: utcz.com/qa/397313.html

回到顶部