double value1=1000
double divisor=0.01
double result=0
result =value1%0.01这时候result的结果会是0.00999 ,这个明显是有问题的,因为这个结果应该是0
为了解决这个问题,java 的BigDecimal有个取余数的方法
BigDecimal[] java.math.BigDecimal.divideAndRemainder(BigDecimal divisor)这个方法会返回一个数组,有两个元素。
divideAndRemainder(BigDecimal divisor)[0] 是商,
divideAndRemainder(BigDecimal divisor)[1]是余数。
BigDecimal value1=new BigDecimal(1000,new MathContext(6));
BigDecimal divisor=new BigDecimal(0.01,new MathContext(6));
BigDecimal result=null;
result=value1.divideAndRemainder(divisor)[1];这个时候result就会为 0
oracle本身也提供一个mod(value1,divisor)函数,这个函数用起来更方便。
select mod(value1,divisor) from dual;上面这个语句就可以帮助得出余数。而且即便除数是0.01,结果和BigDecimal的结果是一样好。
本文探讨了在Java中使用double类型进行取余运算时遇到的精度问题,并介绍了解决方案:通过BigDecimal的divideAndRemainder方法来获取准确的余数。此外,还提到了Oracle数据库中可用的mod函数,它同样能有效处理小数取余的问题。

529

被折叠的 条评论
为什么被折叠?



