Java 是否通过准备好的语句发出setBigDecimal?
我有一份准备好的声明。我打电话Java 是否通过准备好的语句发出setBigDecimal?,java,jdbc,prepared-statement,bigdecimal,Java,Jdbc,Prepared Statement,Bigdecimal,我有一份准备好的声明。我打电话 stmt.setBigDecimal(BigDecimal.valueOf("0.9")) 问题是数据库中保存的是0.9000000000000000000,而不是0.9 我使用MicrosoftSQLServerJDBC驱动程序3.0 驱动程序是否不理解BigDecimal或使驱动程序出错?列上的精度可能是导致此问题的原因。很可能它被声明为数字,没有特定的精度或刻度。列上的精度可能是导致此情况的原因。很可能它被声明为数字,没有特定的精度或刻度。当您指出数据类型
stmt.setBigDecimal(BigDecimal.valueOf("0.9"))
问题是数据库中保存的是0.9000000000000000000,而不是0.9
我使用MicrosoftSQLServerJDBC驱动程序3.0
驱动程序是否不理解BigDecimal或使驱动程序出错?列上的精度可能是导致此问题的原因。很可能它被声明为数字,没有特定的精度或刻度。列上的精度可能是导致此情况的原因。很可能它被声明为数字,没有特定的精度或刻度。当您指出数据类型为十进制(36,20)时,它完全符合逻辑:36,20表示:36个数字精度,其中十进制分隔符后面有20个数字
如果将0.9保存为十进制(36,20),则它将是0.9000000000000000000(在十进制分隔符后有20个位置),因为这是字段的指定精度。当您指示数据类型为十进制(36,20)时,它完全符合逻辑:36,20表示:36个数字精度,其中在十进制分隔符后有20个
如果将0.9保存为十进制(36,20),它将是0.9000000000000000000(在十进制分隔符后有20个位置),因为这是字段的指定精度。该列的完整定义是什么?该列的完整定义是什么?它声明为十进制(36,20)它声明为十进制(36,20)thx,是的,这是合乎逻辑的,对吧。但我觉得这没那么聪明。。。我的意思是,如果我从数据库中读取值,所有计算都使用20个十进制位置完成…如果这不是您想要的,您应该在数据库中的十进制数据类型中使用较小的比例,或者在select.thx中将字段转换为较小比例的十进制类型。是的,这是符合逻辑的,对吗。但我觉得这没那么聪明。。。我的意思是,如果我从数据库中读取值,所有计算都是使用20个十进制位置完成的……如果这不是您想要的,您应该在数据库中的decimal数据类型中使用较小的比例,或者在选择中将字段转换为较小比例的decimal类型。