38 lines
1.1 KiB
Java
38 lines
1.1 KiB
Java
|
|
package com.gunshi.project.xyt.util;
|
||
|
|
|
||
|
|
|
||
|
|
import java.math.BigDecimal;
|
||
|
|
import java.math.RoundingMode;
|
||
|
|
import java.util.List;
|
||
|
|
import java.util.Map;
|
||
|
|
|
||
|
|
|
||
|
|
public class DataHandleUtil {
|
||
|
|
|
||
|
|
|
||
|
|
public static BigDecimal calcData(BigDecimal rz, Map<BigDecimal, BigDecimal> map,List<BigDecimal> list) {
|
||
|
|
//库容曲线中最近的一组水位
|
||
|
|
BigDecimal lowerRz = new BigDecimal(0);
|
||
|
|
BigDecimal upperRz = new BigDecimal(0);
|
||
|
|
|
||
|
|
//库容曲线中最近的一组水位对应的库容
|
||
|
|
BigDecimal lowerW = new BigDecimal(0);
|
||
|
|
BigDecimal upperW = new BigDecimal(0);
|
||
|
|
|
||
|
|
for(int i=0;i<list.size();i++){
|
||
|
|
if (rz.compareTo(list.get(i)) >= 0 && rz.compareTo(list.get(i+1)) <= 0) {
|
||
|
|
lowerRz = list.get(i);
|
||
|
|
upperRz = list.get(i+1);
|
||
|
|
|
||
|
|
lowerW = map.get(lowerRz);
|
||
|
|
upperW = map.get(upperRz);
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
BigDecimal diff = rz.subtract(lowerRz);
|
||
|
|
return lowerW.add(diff.multiply(upperW.subtract(lowerW)).divide(upperRz.subtract(lowerRz),2,RoundingMode.UP));
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
}
|