使用JPA和Oracle在数据库中存储尾随零

Kur*_*aki 0 oracle spring jpa scale java-ee

我需要在我的数据库中存储价格.我正在使用JPA,所以我有一个这样的模型:

@Entity
@Table(name="products")
public class Product {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;

    @Column(name="price")   
    private float price;
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我用"4.20"这样的值填充价格形式输入时,在我的Oracle数据库中,我得到"4.2",失去尾随零.

我怎么解决这个问题?

编辑:因为我正在使用JPA,所以我必须避免在本机Oracle方言中编写查询.为了存储产品(以及它们的价格),我只需要编写类似的东西em.persist(product),其中em是EntityManager

Ed *_*bbs 6

你无法解决它,我建议这不是问题.这就是Oracle存储NUMBER价值的方式:所需的精度最低.如果您输入了4.00将要存储的价格4.

请注意,在显示值时,Java不会默认为两位小数.您需要指定小数位数.

并且,如果可能的话,我会使用BigDecimal而不是float价格.该float类型不是精确.另一种方法是使用整数类型之一(intlong)并自己管理小数位.

要格式化Java代码中显示的价格,请使用String.format("%.2f", price).

要在Oracle查询中格式化价格,请使用TO_CHAR:

SELECT TO_CHAR(price, '999999990.00'), etc.
Run Code Online (Sandbox Code Playgroud)

选择最适合您的占位符数,并注意Oracle会在结果的开头添加一个额外的空格.如果数字是负数,则意味着保持减号,但对于零/正数,这是一个空格.要摆脱空间,请使用以下FM修饰符TO_CHAR:

SELECT TO_CHAR(price, 'FM999999990.00'), etc.
Run Code Online (Sandbox Code Playgroud)