我想计算简单的模运算,但假设我的除数是百分比值。简单的例子:
50 mod 20% = 0
51 mod 20% = 1
52 mod 20% = 2
53 mod 20% = 3
54 mod 20% = 4
55 mod 20% = 0
在这种情况下,它很简单number mod 5
,但是对于其他百分比(例如75%),转换起来就不那么容易了。似乎应该是简单的提醒操作,但是我设法得到的最接近的东西是:
public long modulo(BigDecimal number, BigDecimal percentage) {
BigDecimal flooredPercentValue = number.multiply(percentage).divide(HUNDRED, 0, RoundingMode.FLOOR);
BigDecimal valueThatPercentIsInteger = flooredPercentValue.multiply(HUNDRED)
.divide(percentage, 2, RoundingMode.HALF_UP);
return number.subtract(valueThatPercentIsInteger).longValue();
}
可以用更简单的方式完成吗?
答案 0 :(得分:1)
现在我知道我是对的:您将百分比作为主要问题,尽管它们实际上并不重要,甚至根本不存在。
问题是:
等同于:
当然x,y,…z 可以合计为100,然后可以将它们视为“百分比”,但一般公式也允许比率为5:9或2:7:13 :15,不能用百分数表示。
可以通过这种方式“手动”解决问题:
要更快地做到这一点,我们可以用除法代替迭代减法: