java - 从 Java 中的 BigDecimal 中删除尾随零

标签 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 - 从 Java 中的 BigDecimal 中删除尾随零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17770886/

相关文章:

java - 基于共享首选项的 LRU 缓存

java - 我正在尝试从字符串中打印出 char 的输出

java - 参数中的PreparedStatement setBigDecimal

ruby-on-rails - 使用 Ruby on Rails 从数据库中的 yaml 序列化字段取回大小数

java - 我可以在 hibernate hbm 中使用 BigDecimal 作为 id 类型吗?

java - 在 Java 中使用正则表达式获取 n 个单词

java - JTextArea 缩进设置

java - 为什么我的 Spring webflux 应用程序在每个请求上都会生成临时文件?

Java 将字符串转换为 BigDecimal

java - 为什么输出是科学计数法?