0

我需要将价格存储在我的数据库中。我正在使用 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

4

1 回答 1

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.

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

SELECT TO_CHAR(price, 'FM999999990.00'), etc.
于 2013-08-10T18:24:19.393 回答