Java jdbc如何截断数值?

Java jdbc如何截断数值?,java,jdbc,Java,Jdbc,如果我有一个SQL列,它的刻度2。JDBC如何处理分隔符后超过3位的截断值 示例: 插入值2.989在Sybase中变为2.98,或在Oracle中变为2.99,具体取决于SQL提供程序 JDBC如何处理这个问题 Like@LuiggiMendoza说这取决于驱动程序,这个问题的常见解决方案,我认为更好的方法是对货币值等字段使用BigDecimal,这样你可以处理舍入模式,并将数字保存在你想要的精确值中,让你的代码跨数据库供应商,是的,它稍微慢一点,但它保证了在java中工作的值在保存时是相同的

如果我有一个SQL列,它的刻度
2
JDBC
如何处理分隔符后超过3位的截断值

示例:

插入值
2.989
Sybase中变为
2.98
,或在Oracle中变为
2.99
,具体取决于SQL提供程序


JDBC如何处理这个问题

Like@LuiggiMendoza说这取决于驱动程序,这个问题的常见解决方案,我认为更好的方法是对货币值等字段使用BigDecimal,这样你可以处理舍入模式,并将数字保存在你想要的精确值中,让你的代码跨数据库供应商,是的,它稍微慢一点,但它保证了在java中工作的值在保存时是相同的,我的意思是,这是用JPA处理十进制值的自然方法 如果需要,请举例说明:

ROUND_CEILING: Ceiling function

             0.333  ->   0.34 
            -0.333  ->  -0.33
ROUND_DOWN: Round towards zero

             0.333  ->   0.33 
            -0.333  ->  -0.33
ROUND_FLOOR: Floor function

             0.333  ->   0.33
            -0.333  ->  -0.34
ROUND_HALF_UP: Round up if decimal >= .5

             0.5  ->  1.0
             0.4  ->  0.0
ROUND_HALF_DOWN: Round up if decimal > .5

             0.5  ->  0.0
             0.6  ->  1.0
使用BigDecimal的示例:

a = new BigDecimal("2.5"); // digit left of 5 is even, so round down
b = new BigDecimal("1.5"); // digit left of 5 is odd, so round up
a.setScale(0, BigDecimal.ROUND_HALF_EVEN).toString() // => 2
b.setScale(0, BigDecimal.ROUND_HALF_EVEN).toString() // => 2

来源:

JDBC不会截断它。数据库引擎将启动。一些数据库不会处理它,只是抛出一个异常。请向我们展示您的Java代码来重现这个问题(包括
create table
语句)。另外,请告诉我们您各自的JDBC驱动程序的版本是什么(请注意Oracle文件名中的数字不是驱动程序版本)。我同意@LuiggiMendoza的观点,即截断将发生在数据库中,而不是JDBC级别。@a_horse_与_no_同名,我们有不同的JDBC驱动程序,具体取决于我们的客户使用的提供商。对于sybase,我们使用了
jconn4,7.07.21018
你是对的,但是这里没有证据表明他还没有这样做,也没有回答这个问题。这就是为什么我评论使用课堂中包含的舍入模式,我把它作为一个答案贴出来,因为这样他会有保存值的安全性,重新注册驱动程序,这样问题就失去了意义,但我猜这不是确切的答案,因为正如@LuiggiMendoza已经说过的,这将取决于数据库引擎,而不是驱动程序。使用BigDecimal,他可以取2.989,并将对象本身的行为设置为2.98或2.99,祝您愉快!