绑定@NumberFormat,将逗号设置为小数分隔符?

时间:2012-09-12 10:34:24

标签: oracle hibernate spring-mvc

我的问题是我从数据库读取数字(BigDecimal),我用DOT作为小数分隔符查看它们,但我希望看到它们与COMMA。我使用了以下代码:
    @ NumberFormat(style = Style.NUMBER,pattern =“##,###,###。##”)
    私人BigDecimal号码;

我的应用程序具有以下架构:
oracle db - hibernate - spring mvc

我需要自动转换,而无需使用DecimalFormat手动转换为字符串。

3 个答案:

答案 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));
  }
}