【问题标题】:Precision Java Float in MySQL with JPA (EclipseLink)MySQL 中的精密 Java 浮点数与 JPA (EclipseLink)
【发布时间】:2012-06-21 15:41:43
【问题描述】:

我通过 jpa (EclipseLink) 在 mysql 中存储浮点值时遇到精度问题。在我的代码中,我用

注释了该字段
@Column(precision=15, scale=7)
private float x;

但是当我存储像 322,249878 这样的值时,数据库返回 322.25。那里发生了什么:)?

【问题讨论】:

  • 数据库中列的定义是什么?如果 JPA 创建表,你能拿到 DDL 吗?
  • @esej:列的定义是浮动的。该列的 DDL 也是 X FLOAT。
  • 旁注:浮点数不能包含 15 个十进制数字。它太小了。

标签: java mysql jpa floating-point


【解决方案1】:

precisionscale 设置仅适用于精确数字类型(即 Java 中的 BigDecimal 和 MySQL 中的 decimal)。

浮点类型(floatdouble)本质上是近似的,因此这些设置对它们没有意义。

另请注意,如果您将此字段的类型更改为 BigDecimal you should initialize it with precise values as well

【讨论】:

  • 好的,谢谢你的提示,但它不会改变任何精度;-)
  • @jstr:重新检查一下。 Java 类型应该是BigDecimal,MySQL 类型应该是decimal(15, 7)(如果你使用模式生成,Hibernate 会从这个注解生成它),并且应该用精确的值初始化字段。
  • @jstr:哦,它是 EclipseLink,也许它的行为有所不同。
  • 好的,所以现在我使用 BigDecimal ,我使用 Float.toString(x)) 和 mit 注释 @Column(precision=15, scale=7) 进行初始化,精度得以保留......对我有用
猜你喜欢
  • 2011-09-03
  • 2011-07-12
  • 1970-01-01
  • 2016-06-01
  • 1970-01-01
  • 2015-09-12
  • 2016-03-18
  • 1970-01-01
相关资源
最近更新 更多