比如,0.15+0.7+0.16=1.01,超出1,将最大的那个数字减去0.01,变成1。
这里将0.7-0.01=0.69,0.15+0.69+0.16=1
[
{"rate":"0.15","sceneName":"乘地铁"},
{"rate":"0.7","sceneName":"乘公交"},
{"rate":"0.16","sceneName":"步行"}
]
public class CarbonCensus {
//场景名
private String sceneName;
//占比
private String rate;
}
public class Test {
public static void main(String[] args) {
List<CarbonCensus> carbonCensusList = new ArrayList<>();
CarbonCensus carbonCensus = new CarbonCensus();
("乘地铁");
("0.15");
(carbonCensus);
carbonCensus = new CarbonCensus();
("0.7");
("乘公交");
(carbonCensus);
carbonCensus = new CarbonCensus();
("0.16");
("步行");
(carbonCensus);
if ((carbonCensusList)) {
return;
}
//合计
BigDecimal bigDecimal = new BigDecimal(0);
for(int i=0; i<(); i++) {
bigDecimal = (new BigDecimal((i).getRate()));
}
double rate = ();
if(rate == 1) {
return;
}
if(rate > 1) {
//需要减的次数,比如rate=1.02,就是减2次
int minusCount = (int)(rate * 100 - 100);
for (int i=0; i<minusCount; i++) {
Optional<CarbonCensus> optional = ().max(((o1, o2) ->
(int)((())*100) - (int)((())*100)));
if(()) {
item = ();
(new BigDecimal(()).subtract(new BigDecimal("0.01")).toString());
}
}
} else if(rate < 1) {
//需要加的次数,比如rate=0.98,就是加2次
int addCount = (int)(100 - rate * 100);
for (int i = 0; i< addCount; i++) {
Optional<CarbonCensus> optional = ().min(((o1, o2) ->
(int)((())*100) - (int)((())*100)));
if(()) {
item = ();
(new BigDecimal(()).add(new BigDecimal("0.01")).toString());
}
}
}
((carbonCensusList));
//[{"rate":"0.15","sceneName":"乘地铁"},{"rate":"0.69","sceneName":"乘公交"},{"rate":"0.16","sceneName":"步行"}]
}
}