0

我的问题是我从数据库中读取数字(BigDecimal),并用 DOT 作为小数点分隔符来查看它们,但我想用 COMMA 来查看它们。我使用了以下代码:
@ NumberFormat (style = Style.NUMBER, pattern = "##,###,###.##")
private BigDecimal number;

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

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

4

3 回答 3

1

BigDecimal 是 BigDecimal。它没有任何内在格式。

此外,绝对不是像 Hibernate 这样的 ORM 的工作来按照您希望的方式显示数据。将您的实体视为数据,并在需要显示数据时在表示层中使用适当的 NumberFormat。数字格式与持久层无关。

编辑:我误解了这个问题:

NumberFormat 取决于语言环境。这意味着,表示“与区域设置关联的组分隔符”,并'.'表示“与区域设置关联的小数分隔符”。

如果您想要一个点作为组分隔符和一个逗号作为小数分隔符,请使用默认情况下将它们作为分隔符的区域设置,或者使用 DecimalFormat 并将DecimalFormatSymbols 设置为适当的值。

于 2012-09-12T10:38:41.607 回答
1

我这样解决了:

@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));
}
于 2012-09-13T07:20:19.163 回答
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));
  }
}
于 2014-09-08T21:39:47.047 回答