我有一个带有BigDecimal字段的类。我把这个对象放到JSP (Spring )中。我需要在十进制中显示没有零的BigDecimal字段(20.00像20),这就是为什么我的getter方法看起来像
public BigDecimal getValue() {
return value.stripTrailingZeros();
}我有下一个结果:
20.50 = 20.5;
13.25 = 13.25;
30.00 = 3E+1.如何将3E+1更改为30?我可以用Java或JSTL格式化它吗?
发布于 2014-12-09 21:16:41
我找到了一个简单的解决方案。它不需要在getter方法中执行stripTrailingZeros()。只是
public BigDecimal getValue() {
return value;
}在JSP上
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatNumber value="${object.value}" minFractionDigits="0"/>发布于 2014-12-07 16:22:10
我认为只需在返回的大小数点上使用toPlainString()就可以了。
简单测试程序:
BigDecimal[] bds={new BigDecimal("1.0"),new BigDecimal("20.50"),
new BigDecimal("13.25"),
new BigDecimal("30.0"),
new BigDecimal("30.01000"), new BigDecimal("0.0000")
};
for (BigDecimal bd: bds)
System.out.println(bd+"==>"+bd.stripTrailingZeros().toPlainString());返回:
1.0==>1
20.50==>20.5
13.25==>13.25
30.0==>30
30.01000==>30.01
0.0000==>0.0000只有一种边界情况,我知道它不能工作,for..and是0的所有变体。
0.0 => 0.0
0.00 => 0.00我相信这已经在这篇堆栈溢出文章中讨论过了:正如本文所述,为什么新的BigDecimal("0.0").stripTrailingZeros()的刻度是1?已经在java 8中进行了修正(但我还没有对它进行测试)。
您可以通过执行compareTo( BigDecimal.ZERO )==0并在这种情况下使用BigDecimal.ZERO来解决这个问题。
BigDecimal[] bds={new BigDecimal("1.0"),
new BigDecimal("20.50"),
new BigDecimal("13.25"),
new BigDecimal("30.0"),
new BigDecimal("30.01000"),
new BigDecimal("0.0000")
};
for (BigDecimal bd: bds){
if (bd.compareTo(BigDecimal.ZERO) == 0){
System.out.println(bd+"=>"+BigDecimal.ZERO);
}
else {
System.out.println(bd+"==>"+bd.stripTrailingZeros().toPlainString());
}返回:
1.0==>1
20.50==>20.5
13.25==>13.25
30.0==>30
30.01000==>30.01
0.0000=>0发布于 2014-12-06 17:33:57
如果可以将格式化方法从BigDecimal控制到String (框架显示从BigDecimal.toString()返回的字符串),则可以使用NumberFormat更好地控制显示的字符串。
根据春季文献,您可以为该作业实现一个自定义格式化程序。
我建议您重写默认的NumberFormatter并重写print方法,如下所示:
public class NoZeroesBigDecimalFormatter extends org.springframework.format.number.NumberFormatter{
@Override
public String print(Number number, Locale locale) {
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(5); //whatever value is your maximum displayed digits
return nf.format(value);
}
}然后,看看如何将格式化程序绑定到您的字段。
https://stackoverflow.com/questions/27334387
复制相似问题