使用JPA(EclipseLink)的MySQL中的精确Java浮点

使用JPA(EclipseLink)的MySQL中的精确Java浮点,java,mysql,jpa,floating-point,Java,Mysql,Jpa,Floating Point,我通过jpa(EclipseLink)在mysql中存储浮点值时存在精度问题。在我的代码中,我用 @Column(precision=15, scale=7) private float x; 但当我存储322249878这样的值时,数据库返回322.25。发生了什么:)?精度和比例设置仅适用于精确的数字类型(即Java中的BigDecimal和MySQL中的decimal) 浮点类型(float和double)本质上是近似的,因此这些设置对它们没有意义 还请注意,如果将此字段的类型更改为Bi

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

@Column(precision=15, scale=7)
private float x;

但当我存储322249878这样的值时,数据库返回322.25。发生了什么:)?
精度和比例设置仅适用于精确的数字类型(即Java中的
BigDecimal
和MySQL中的
decimal

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


还请注意,如果将此字段的类型更改为
BigDecimal

,则db中的列的定义是什么?如果JPA创建了这些表,你能得到DDL吗?@esej:列的定义是float。该列的DDL也是X浮点。旁注:浮点不能包含15位十进制数字。太小了。好的,谢谢你的提示,但它不会改变任何精度;-)@jstr:再检查一下。Java类型应该是
BigDecimal
,MySQL类型应该是
decimal(15,7)
(如果使用架构生成,Hibernate将从这个注释生成),字段应该由精确的值初始化。@jstr:Oh,它是EclipseLink,也许它的行为有所不同。好吧,现在我使用BigDecimal,我用Float.toString(x)初始化它,用mit注释@Column(精度=15,刻度=7)保留精度。。。为我工作