我有一些常数,例如:
BigDecimal ceiling1 = new BigDecimal(5);
BigDecimal ceiling2 = new BigDecimal(10);
BigDecimal ceiling3 = new BigDecimal(20);
BigDecimal rate1 = new BigDecimal(0.01);
BigDecimal rate2 = new BigDecimal(0.02);
BigDecimal rate3 = new BigDecimal(0.04);
BigDecimal rate4 = new BigDecimal(0.09);
现在基于参数 f.e.:
BigDecimal arg = new BigDecimal(6);
我想检索基于此 if 结构(简化)的正确汇率:
if(arg <= ceiling1) {
rate = rate1;
}else if(arg <= ceiling2) {
rate = rate2;
} else if (arg <= ceiling3) {
rate = rate3;
}else rate = rate4;
所以在我的示例中 rate
应该是 rate2
但我想知道是否有人知道一个更好的方法来实现这个,而不是一堆如果。
欢迎任何指点!
PS:我知道我的代码不是 100% 正确,只是想展示一下这个想法
最佳答案
您可以将上限存储为 TreeMap 中的键,将费率存储为值。然后使用 floorEntry 并参见 here .
final TreeMap<BigDecimal, BigDecimal> rates = new TreeMap<BigDecimal, BigDecimal>();
rates.put(new BigDecimal(0), new BigDecimal(0.01));
rates.put(new BigDecimal(5), new BigDecimal(0.02));
rates.put(new BigDecimal(10), new BigDecimal(0.04));
rates.put(new BigDecimal(20), new BigDecimal(0.09));
System.out.println(rates.floorEntry(new BigDecimal(0)).getValue());
System.out.println(rates.floorEntry(new BigDecimal(6)).getValue());
System.out.println(rates.floorEntry(new BigDecimal(10)).getValue());
System.out.println(rates.floorEntry(new BigDecimal(100)).getValue());
测试:http://ideone.com/VrucK .您可能想要使用不同的表示形式,正如您在测试中看到的那样,它看起来很丑陋(就像天花板上的整数)。顺便说一句,丑陋的输出来自 0.01 是双 which does funny things with decimal representations 的事实。 .
编辑:建议 cleanup .
关于java - 校验值为 'ceiling' 值并返回对应变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997849/