我的问题是我从数据库读取数字(BigDecimal),我用DOT作为小数分隔符查看它们,但我希望看到它们与COMMA。我使用了以下代码:
@ NumberFormat(style = Style.NUMBER,pattern =“##,###,###。##”)
私人BigDecimal号码;
我的应用程序具有以下架构:
oracle db - hibernate - spring mvc
我需要自动转换,而无需使用DecimalFormat手动转换为字符串。
答案 0 :(得分:1)
BigDecimal是一个BigDecimal。它没有任何内在格式。
此外,像Hibernate这样的ORM的工作肯定是不以您希望的方式转换数据。将实体视为数据,并在需要显示数据时在表示层中使用相应的NumberFormat。数字格式在持久层中无关。
编辑:我误解了这个问题: NumberFormat与语言环境有关。这意味着,
表示“与区域设置关联的组分隔符”,'.'
表示“与区域设置关联的小数分隔符”。
如果您想要一个点作为组分隔符而逗号作为十进制分隔符,请使用默认情况下将这些作为分隔符的区域设置,或者使用DecimalFormat和set the DecimalFormatSymbols来表示相应的值。
答案 1 :(得分:0)
我这样解决了:
@InitBinder
public void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
DecimalFormat df =new DecimalFormat();
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setDecimalSeparator(',');
df.setGroupingUsed(false);
df.setDecimalFormatSymbols(dfs);
df.setMaximumFractionDigits(32);
df.setMaximumIntegerDigits(32);
binder.registerCustomEditor(BigDecimal.class, new CustomNumberEditor(BigDecimal.class,df, true));
}
答案 2 :(得分:0)
类似于@Tostis'解决方案,但使用全局应用的@InitBinder:
@ControllerAdvice
public class GlobalBindingInitializer {
@InitBinder
public void initBigDecimalBinder(WebDataBinder binder) throws Exception {
DecimalFormat df = new DecimalFormat();
DecimalFormatSymbols dfs = new DecimalFormatSymbols();
dfs.setGroupingSeparator(',');
df.setDecimalFormatSymbols(dfs);
binder.registerCustomEditor(BigDecimal.class, new CustomNumberEditor(BigDecimal.class, df, true));
}
}