Oracle JDBC:双下溢

时间:2016-11-08 08:50:39

标签: java oracle jdbc double precision

当尝试将双精度数插入Oracle表的 DOUBLE PRECISION 列时,当双精度数超出范围(在我的情况下:太小)时,我会收到异常,但仅在使用{时{1}}(如果我使用普通PreparedStatement,则将双精简舍入为0)。

表:

Statement

Java代码:

create table test
(
  VALUE DOUBLE PRECISION
);
  • 在插入/更新语句中使用它们之前,是否必须检查并舍入所有双打?
  • 我可以以某种方式自动舍入值吗?

感谢您的任何见解/提示。

2 个答案:

答案 0 :(得分:3)

正如您在评论中所述,

DOUBLE PRECISION = FLOAT(126)

使用BINARY_DOUBLE数据类型与Java Double具有相同的精度。

参考:

答案 1 :(得分:1)

这是预期的,因为双精度最终将转换为数字,而数字仅支持范围 - 1E-130 .. 10E125

SQL> select to_char(to_number(1.0e-234)) from dual;

T
-
0

SQL> select to_char(to_number(1e-130)) from dual;

TO_CHAR(TO_NUMBER(1E-130))
----------------------------------------
1.000000000000000000000000000000000E-130
  

FLOAT:

     

具有精度p的NUMBER数据类型的子类型。 FLOAT值在内部表示为NUMBER。精度p的范围可以是1到126个二进制数字。 FLOAT值需要1到22个字节。 More...

来自AskTom

  

没有显示浮点数不是数字,它们只是一个精度与数字本身不同的数字。