BigDecimal剥离尾随零

问题描述

我有一个BigDecimal值,想删除尾随零直到某个点。以下是一些示例:

1.00000 -> 1.0
12.2    -> 12.2
19.9300 -> 19.93

请注意第一种情况,当所有小数均为零时,我们要精确保留小数点后一位。我想避免使用stripTrailingZeros(),因为在某些情况下(例如1E + 1)这可以转换成科学计数法

编辑:在这种情况下,BigDecimal的小数位数已设置为大于5的值。

解决方法

您确实需要使用stripTrailingZeros()来消除零,但是您可以使用setScale()确保小数点后至少一位。

for (String s : new String[] { "1.00000","12.2","19.9300","1e+10","1e-10","0" }) {
    BigDecimal value = new BigDecimal(s);
    
    value = value.stripTrailingZeros();
    if (value.scale() < 1)
        value = value.setScale(1);
    
    System.out.println(value);
}

输出

1.0
12.2
19.93
10000000000.0
1E-10
0.0

如果您不希望使用1E-10,则必须调用toPlainString(),因为这是普通toString()会输出这么小的值的方式。