标记有@NumberFormat(pattern = "0.00") 的字段,为什么入库的时候不是两位小数的?

例如我的字段标有
image

界面控件如下
image

界面显示如下,输入
image
光标离开后变成
image

点击保存后,存储到数据库的却不是56.66而是5.6598,这是为什么?有什么办法可以解决,显示什么入库就存入什么。

您好!能否能尽快回复一下!

  1. 你可以查看一下Jmix日志里的 sql,insert 的是什么值。这里应该是56.6598。
  2. 数据库的字段,如果你只需保留2为小数,需要定义为 DECIMAL(19,2),例如:
@NumberFormat(pattern = "0.00")
@Column(name = "PRICE", precision = 19, scale = 2)
private BigDecimal price;

如果你的数据库字段是4位精度的小数,那么56.6598就会按原值保存。

只能通过修改数据库吗?数据库列并没有指定精度,我不能页面控件显示什么就存入什么吗?因为有我一些不是数据库字段的,是DTO字段,然后把DTO变成一个JSON入库

可以监听字段的ValueChange事件:

@Subscribe("priceField")
public void onPriceFieldValueChange(final HasValue.ValueChangeEvent<BigDecimal> event) {
    getEditedEntity().setPrice(event.getValue().setScale(2, RoundingMode.HALF_UP));
}