我正在使用javax.persistence API和Hibernate在Oracle 11g Express数据库中创建注释并将实体及其属性持久化。
我在实体中具有以下属性:
@Column(precision = 12, scale = 9)
private BigDecimal weightedScore;
目标是保留一个最大为12位的十进制值,并且在小数点右边最多保留9个数字。
计算后weightedScore
,结果为0.1234,但是一旦我将实体与Oracle数据库一起提交,该值就会显示为0.12。
我可以通过使用EntityManager对象查询条目或通过在Web浏览器中的Oracle Application
Express(Apex)界面中直接查看条目来看到它。
我应该如何注释BigDecimal属性,以便正确保留精度?
注意:我们使用内存中的HSQL数据库来运行我们的单元测试,并且无论是否带有@Column
注释,它都不会因为缺乏精度而遇到问题。
更新:
查看表说明,该weightedScore
列的定义为NUMBER(19, 2)
。我现在还尝试将注释更改为@Column(columnDefinition="Number(12, 9)")
,但这没有任何效果。有谁知道为什么Oracle对这些注释不响应?
我找到了答案。头晕!
我试图通过Oracle Apex接口执行以下查询:
alter table NODE modify (WEIGHTEDSCORE NUMBER(12, 9));
我收到一条错误消息,指出无法修改包含数据的列以降低精度或缩小比例。这是我的问题!
因为我试图用现有数据更改表,所以我需要删除表并重新初始化它,或者更改列以仅具有更高的精度和小数位数。
我尝试成功执行以下查询:
alter table NODE modify (WEIGHTEDSCORE NUMBER(26, 9));
原因是我想在小数点右边添加7位精度,因此我在整体精度上添加7位以补偿比例的增加。这样,该列可以将所有现有精度保留在小数点左边,而在右边添加精度。
问题内容: 我知道以下行为是一个老问题,但我仍然不明白。 或者即使我使用 为什么这个结果是:而不是:? 我该如何解决? 问题答案: 你真正想要的是 该构造得到的所有的不精确性,所以由你说的时候,你已经引入了舍入误差。使用构造函数可避免与通过导致的舍入错误。
问题内容: 上面的代码显示: 我如何才能仅打印(或将其用作)11.4? 问题答案: 正如其他人提到的那样,如果您想要精确表示为11.4,则可能要使用该类。 现在,对造成这种情况的原因进行一些解释: Java中的和类型是浮点数,其中的数字以小数和指数的二进制表示形式存储。 更具体地说,双精度浮点值(例如doubletype)是64位值,其中: 1位表示符号(正或负)。 指数为11位。 52位为有效数
问题内容: 上面的代码打印: 我如何才能仅打印(或将其用作)11.4? 问题答案: 正如其他人所提到的,如果你想要精确表示为11.4,则可能要使用该类。 现在,对造成这种情况的原因进行一些解释: Java中的和类型是浮点数,其中的数字以小数和指数的二进制表示形式存储。 更具体地说,诸如类型的双精度浮点值是64位值,其中: 1位表示符号(正或负)。 指数为11位。 52位为有效数字(小数部分为二进制
我正在编写一个程序,打印浮点文字,以便在另一个程序中使用。 我需要打印多少位数才能保持原始浮点数的精度? 由于浮点数有十进制数字的精度,我最初的想法是打印8位数字应该足够了。但是,如果我运气不好,那会分布在7位有效数字的左侧和右侧,所以我应该打印9位十进制数字。 我的分析正确吗?9位十进制数字对所有情况都足够吗?如
问题内容: 我有一个关于Hibernate使用的简单问题。我通过注释类的字段以及注释相应bean的get方法,以两种方式之一不断看到人们使用JPA注释。 我的问题如下:使用JPA注释,例如@Id,注释字段和bean方法之间是否有区别。 例: - - - - - -要么 - - - - - - 问题答案: Spring首选项是字段访问。这就是我所遵循的。
问题内容: 我有一个XSD,要求我对经纬度使用BigDecimal。目前,我将经度/纬度作为双精度值,并将其转换为BigDecimal,但仅需要使用12个精度位即可。我还无法弄清楚该如何设置。谁能帮我这个? 问题答案: 问题的标题询问精度。BigDecimal区分小数位数和精度。小数位数是小数位数。您可以将精度视为有效数字的数量,也称为有效数字。 Clojure中的一些示例。 (在Clojure中