我有一个输入表,其中有一行我试图读取,其中我感兴趣的列值为0.070070073108537356(总共20位,小数点后18位)
我将读取首选项设置为使用Spark DecimalType(precision = 38, scale = 18)
读取,这是表示java.math.BigDecimal
值的数据类型。当我读到这个值时,我最终获得了0.070070073108537360,它的等级为18,但似乎是将数字四舍五入以创建一个具有相同比例但是舍入值的新小数。
我认为BigDecimal.setScale(18)
会给我与输入完全相同的数字,因为它在小数点后面有18位数字。
有人可以解释为什么BigDecimal会结束吗?
好像它是一个错误的1,并且使用19的等级会给我我想要的数字。
更新:经过一些测试后,如果我使用小数为16或更小的小数,这个舍入问题似乎不会发生。一旦我将其提高到17的等级,小数点后的十进制数为17,它就会开始四舍五入。