我在 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?
我在 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?
您正在突破 32 位 IEEE 754 Wikipedia浮点精度的极限。它具有大约 24 位的精度。通常的经验法则是,可用的最小增量值大约是您要增加的数字值的 1 / 10**7。
261.1200 和 261.1201 在存储在 a 中的精度级别是FLOAT
相同的值。这个 SQL Fiddle 证明了这个事实。 http://sqlfiddle.com/#!2/2a521/2/0
所有float
和double
数字都是近似值。
http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
http://introcs.cs.princeton.edu/java/91float/
当两个浮点值不==
相等时,即使您认为它们应该相等,这也不会让人感到意外。当他们出现时,这总是一个惊喜。
我知道这是一个非常古老的讨论线程,但今天我解决了同样的问题并想与大家分享。
在数据库端,其中一列是浮点数,我正在使用发送浮点数据
call = (CallableStatement)this.getStatement();
call.setFloat(floatData)
但是当我尝试保存一些浮点值时,正确的数据不会保存在数据库中,以及它是如何转换为不同的十进制值的。
解决方案:
然后我将 floatData 转换为 dobule 值并调用
call.setDouble(doubledata)
即使在数据库列是浮点类型。
现在它工作正常。