当统计时,四舍五入超过100%,怎么处理

时间:2025-04-11 13:30:37

比如,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":"步行"}]


    }


}