我需要存储的价格在我的数据库。 我使用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的
你可以不解决它,我建议这不是一个问题。 这是甲骨文只是如何存储NUMBER
值:用最少的精度需要。 如果你输入的价格为4.00
它将被存储为4
。
请注意,Java将不会默认为两位小数显示值当任。 你需要指定小数位的数量。
而且,如果可能的话,我会使用BigDecimal
,而不是float
的价格。 所述float
类型不是精确。 另一种方法是使用整数类型(的一个int
或long
),并自行管理小数。
要格式化显示的价格在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.