当前位置: 首页 > 面试题库 >

Oracle JDBC:双倍下溢

后树
2023-03-14
问题内容

当尝试将双精度型插入到Oracle表的 DOUBLE PRECISION
列中时,当双精度型超出范围时(在我的情况下:太小),我得到一个异常,但是只有在使用时PreparedStatement(如果我使用normal
Statement,它会四舍五入)到0)。

表:

create table test
(
  VALUE DOUBLE PRECISION
);

Java代码

double d = 1e-234;

// using Statement works, the number gets rounded and 0 is inserted
try (Statement stmt = conn.createStatement()) {
    stmt.executeUpdate("insert into test values (" + d + ")");
}

// using PreparedStatement fails, throws an IllegalArgumentException: Underflow
try (PreparedStatement stmt = conn.prepareStatement("insert into test values (?)")) {
    stmt.setDouble(1, d);
    stmt.executeUpdate();
}
  • 在插入/更新语句中使用双打之前,是否必须检查并四舍五入?
  • 我可以以某种方式自动将值取整吗?

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


问题答案:

DOUBLE PRECISION= FLOAT(126)如您在评论中指出的。

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

参考:

  • https://docs.oracle.com/cd/E11882_01/timesten.112/e21642/types.htm#TTSQL124


 类似资料:
  • 我有一个jUnit测试断言两个双重对象与以下: 这很好,然后我决定将其改为使用原语double,结果发现它已被弃用,除非还提供了delta。 所以我想知道的是,在这个assertEquals中使用双对象或原语类型有什么区别?为什么使用没有增量的对象是可以的,但是使用没有增量的原语是不可取的?Java是否在后台做了一些已经考虑了默认增量值的事情? 谢谢

  • 双倍游戏C++ 说一下你最熟悉的语言的优缺点 创建一张表,插入数据,筛选数据,写出对应的sql语句 mysql数据库索引的数据结构是什么,为什么选这个? 请描述一下tcp三次握手和四次挥手的详细过程 请说明一下tcp什么会产生time_await,为什么产生,有什么危害吗,怎么解决? 如果将大量的小数据包合成在一起接受到的大数据包如何拆分为原来的小数据 给一个01字符串数据解密 冒泡排序或者选择排

  • 正如文档https://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/中所述,我试图将设置为自动增量,这几乎可以正常工作,但是当试图插入记录时,函数返回的值是,而不是,因此我尝试了以下更改。

  • 问题内容: 我的程序的一部分需要在while循环内使用以下值: 0.1 0.2 0.3 … 0.9 所以我需要在循环中提供它们。 这是代码: 我需要输出准确: 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 但这实际上给了我类似的东西: 0.1 0.2 0.300000000000000000000000004 0.4 0.5 0.6 0.79999999999999999

  • 问题内容: 我知道双重价值的内部代表是这样的。但是下面的代码仍然让我感到困惑。 码: 输出: 到底是怎么回事?加法,乘法进行得很好,但减法,除法则不好。谁能解释一下 加法为何与减法不同 ? 问题答案: 简短的答案是,对于浮点运算,您存在表示错误和舍入错误。在“知道”表示错误,所以如果没有舍入误差,你看不到它。但是,如果舍入误差太大,则可以。 解决方案是使用BigDecimal或舍入结果。 如果使用

  • 我开发了一个程序,它创建一个书籍对象数组,并根据用户输入对它们进行排序。排序选项是author-title-pages-price,除了price排序之外,其他都可以。请帮我找出为什么我不能使用比较器对双打进行排序...我的课本课: 和排序程序: