2

我在 java 中使用浮点数,打印它们并将它们存储在 MySQL 浮点列中。结果是java打印显示如下x=260.1201 y=260.12

没关系,因为 x=y+0.0001 当我尝试将这些值存储在 MySQL 的两个浮点列中时,我可以在其中读取的值是 x=260.12 y=260.12

为什么会有这种差异?java的float和MySQL的float不是一回事吗?

只是另一个问题:我可以期望在哪个更大的值下使用 java float 正确工作,精度为 0.0001?

4

2 回答 2

3

您正在突破 32 位 IEEE 754 Wikipedia浮点精度的极限。它具有大约 24 位的精度。通常的经验法则是,可用的最小增量值大约是您要增加的数字值的 1 / 10**7。

261.1200 和 261.1201 在存储在 a 中的精度级别是FLOAT相同的值。这个 SQL Fiddle 证明了这个事实。 http://sqlfiddle.com/#!2/2a521/2/0

所有floatdouble数字都是近似值。

http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html

http://introcs.cs.princeton.edu/java/91float/

当两个浮点值不==相等时,即使您认为它们应该相等,这也不会让人感到意外。当他们出现时,这总是一个惊喜。

于 2013-08-31T19:40:22.723 回答
2

我知道这是一个非常古老的讨论线程,但今天我解决了同样的问题并想与大家分享。

在数据库端,其中一列是浮点数,我正在使用发送浮点数据

call = (CallableStatement)this.getStatement();
call.setFloat(floatData)

但是当我尝试保存一些浮点值时,正确的数据不会保存在数据库中,以及它是如何转换为不同的十进制值的。

解决方案:

然后我将 floatData 转换为 dobule 值并调用

call.setDouble(doubledata)

即使在数据库列是浮点类型。

现在它工作正常。

于 2015-03-19T10:34:00.123 回答