存储数据库JPA和Oracle尾随零(Storing trailing zeroes in data

2019-10-31 01:13发布

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

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

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

    @Column(name="price")   
    private float price;
}

问题是,当我填写价格的形式输入,如“4.20”的价值观,我在Oracle数据库上我得到“4.2”,失去了尾随零。

我怎么解决这个问题?

编辑:由于我使用JPA,我必须避免在本地Oracle方言编写查询。 为了存储产品(及其价格),我只是写类似em.persist(product) ,其中EM是EntityManager的

Answer 1:

你可以不解决它,我建议这不是一个问题。 这是甲骨文只是如何存储NUMBER值:用最少的精度需要。 如果你输入的价格为4.00它将被存储为4

请注意,Java将不会默认为两位小数显示值当任。 你需要指定小数位的数量。

而且,如果可能的话,我会使用BigDecimal ,而不是float的价格。 所述float类型不是精确。 另一种方法是使用整数类型(的一个intlong ),并自行管理小数。

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

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

SELECT TO_CHAR(price, '999999990.00'), etc.

选择一个最适合你的占位符的数量,并注意甲骨文将投入额外的空间,在结果的开始。 这意味着要保持一个减号,如果是负数,但零/负这是一个空间。 为了摆脱空间的使用FM中的调节剂TO_CHAR

SELECT TO_CHAR(price, 'FM999999990.00'), etc.


文章来源: Storing trailing zeroes in database with JPA and Oracle