Spring MVC @NumberFormat百分比小数

时间:2015-06-30 15:50:44

标签: java spring spring-mvc number-formatting thymeleaf

我使用Spring MVC(4.1.6.RELEASE)和Thymeleaf(2.1.4.RELEASE)。我的实体类的百分比字段存储为float

@Entity
@Table(name="loans")
public class Loan {
    private float percentage;
    ...

    @NumberFormat(style=NumberFormat.Style.PERCENT)
    @Column(name="percentage")
    public float getPercentage() {
        return percentage;
    }
    public void setPercentage(float percentage) {
        this.percentage = percentage;
    }
    ...
}

我的观点使用Thymeleaf Spring方言将此bean绑定到表单。

<form th:object="${loan}" th:action="@{/form-handler}">
    <input type="text" th:field="*{percentage}" placeholder="e.g. 1.5%" />
    <input type="submit" />
</form>

表单绑定在提交时工作正常。输入值为&#34; 12.675%&#34;绑定到bean并保存到数据库中作为&#34; 0.12675&#34;,但是当在编辑表单中显示时,使用{{1}时,Spring @NumberFormat注释会自动舍入到13% }。我想显示小数百分点,即&#34; 12.675%&#34;。

我考虑过在我的实体上编写一个单独的getter(例如getPercentFormatted),但是NumberFormat.Style.PERCENT字段在我的Controller中无法正确绑定。我想我也可以写一个额外的setter,它除以100并设置属性,但我不喜欢这种方法。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

尝试使用适当的模式

添加@NumberFormat属性pattern

来自http://docs.spring.io/autorepo/docs/spring/4.0.9.RELEASE/javadoc-api/org/springframework/format/annotation/NumberFormat.html

  

对于自定义格式,请将pattern()属性设置为数字   模式,例如#,###。##。

     

每个属性都是互斥的,因此每个属性只能设置一个属性   注释实例(最方便的一个用于格式化)   需要)。指定pattern属性时,它优先   在style属性上。如果未指定注释属性,   应用的默认格式是基于样式的,样式为   NumberFormat.Style.NUMBER。