java 取余数 : %,BigDecimal 和oracle的比较

本文探讨了在Java中使用double类型进行取余运算时遇到的精度问题,并介绍了解决方案:通过BigDecimal的divideAndRemainder方法来获取准确的余数。此外,还提到了Oracle数据库中可用的mod函数,它同样能有效处理小数取余的问题。

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的结果是一样好。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值