|
@@ -4,10 +4,7 @@ import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.gyee.gaia.meter.adapter.Adapter;
|
|
import com.gyee.gaia.meter.adapter.Adapter;
|
|
-import com.gyee.gaia.meter.entity.Equipment;
|
|
|
|
-import com.gyee.gaia.meter.entity.ModelPowerDetails;
|
|
|
|
-import com.gyee.gaia.meter.entity.PointData;
|
|
|
|
-import com.gyee.gaia.meter.entity.TestingPoint;
|
|
|
|
|
|
+import com.gyee.gaia.meter.entity.*;
|
|
import com.gyee.gaia.meter.service.impl.EquipmentServiceImpl;
|
|
import com.gyee.gaia.meter.service.impl.EquipmentServiceImpl;
|
|
import com.gyee.gaia.meter.service.impl.ModelPowerDetailsServiceImpl;
|
|
import com.gyee.gaia.meter.service.impl.ModelPowerDetailsServiceImpl;
|
|
import com.gyee.gaia.meter.service.impl.TestingPointServiceImpl;
|
|
import com.gyee.gaia.meter.service.impl.TestingPointServiceImpl;
|
|
@@ -97,6 +94,23 @@ class TDSaveLLFDL1MinTest {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
|
|
+ //根据uniform_code=AI130从testing_point表中获取到风机的实际功率测点
|
|
|
|
+ List<TestingPoint> testingPointList1 = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
|
+ .eq("uniform_code", "AI022")
|
|
|
|
+ );
|
|
|
|
+ //遍历testingPointList1,把code取出放入一个string集合
|
|
|
|
+ List<String> codeList1 = new ArrayList<>();
|
|
|
|
+ for (TestingPoint testingPoint : testingPointList1) {
|
|
|
|
+ String code = testingPoint.getCode();
|
|
|
|
+ codeList1.add(code);
|
|
|
|
+ }
|
|
|
|
+ //遍历codeList作为适配器的参数,获取到1分钟实际平均功率
|
|
|
|
+ for (String code : codeList1) {
|
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
//根据uniform_code=AI022从testing_point表中获取到风机的风速测点
|
|
//根据uniform_code=AI022从testing_point表中获取到风机的风速测点
|
|
List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
.eq("uniform_code", "AI022")
|
|
.eq("uniform_code", "AI022")
|
|
@@ -113,7 +127,7 @@ class TDSaveLLFDL1MinTest {
|
|
|
|
|
|
//遍历codeList作为适配器的参数,获取到1分钟平均风速
|
|
//遍历codeList作为适配器的参数,获取到1分钟平均风速
|
|
for (String code : codeList) {
|
|
for (String code : codeList) {
|
|
- List<PointData> pointDataList = adapter.getHistorySnap(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
|
|
|
//遍历testingPointList,根据code取到风机编码thing_id
|
|
//遍历testingPointList,根据code取到风机编码thing_id
|
|
for (TestingPoint testingPoint : testingPointList) {
|
|
for (TestingPoint testingPoint : testingPointList) {
|
|
@@ -128,24 +142,24 @@ class TDSaveLLFDL1MinTest {
|
|
//根据modelId从map中取出map集合,键为speed,值为theory_power
|
|
//根据modelId从map中取出map集合,键为speed,值为theory_power
|
|
Map<BigDecimal, Double> map2 = map.get(modelId);
|
|
Map<BigDecimal, Double> map2 = map.get(modelId);
|
|
//遍历pointDataList,拿到风速,根据风速从map2中取到理论功率,计算1分钟理论发电量
|
|
//遍历pointDataList,拿到风速,根据风速从map2中取到理论功率,计算1分钟理论发电量
|
|
- for (PointData pointData : pointDataList) {
|
|
|
|
|
|
+ for (PointDatas pointData : pointDataList) {
|
|
//风速
|
|
//风速
|
|
- double speed0 = pointData.getValue();
|
|
|
|
|
|
+ double speed0 = pointData.getAvg().getValue();
|
|
BigDecimal speed = new BigDecimal(speed0).setScale(2, RoundingMode.HALF_EVEN);
|
|
BigDecimal speed = new BigDecimal(speed0).setScale(2, RoundingMode.HALF_EVEN);
|
|
|
|
|
|
Double theoryPower = 0.0;
|
|
Double theoryPower = 0.0;
|
|
- if (speed0 >= 3) {
|
|
|
|
|
|
+ if (speed0 >= 3 && speed0 <= 25) {
|
|
//理论功率
|
|
//理论功率
|
|
theoryPower = map2.get(speed);
|
|
theoryPower = map2.get(speed);
|
|
}
|
|
}
|
|
//时间
|
|
//时间
|
|
- DateTime dateTime = DateTime.of(pointData.getTs());
|
|
|
|
|
|
+ DateTime dateTime = DateTime.of(pointData.getAvg().getTs());
|
|
|
|
|
|
|
|
|
|
- BigDecimal llfdl= BigDecimal.valueOf(0);
|
|
|
|
|
|
+ BigDecimal llfdl = BigDecimal.valueOf(0);
|
|
//1分钟理论发电量
|
|
//1分钟理论发电量
|
|
- if(theoryPower != null){
|
|
|
|
- llfdl = new BigDecimal(Double.toString(theoryPower))
|
|
|
|
|
|
+ if (theoryPower != null) {
|
|
|
|
+ llfdl = new BigDecimal(Double.toString(theoryPower))
|
|
.multiply(new BigDecimal(Double.toString(1)))
|
|
.multiply(new BigDecimal(Double.toString(1)))
|
|
.divide(new BigDecimal(Double.toString(60)), 2, RoundingMode.HALF_UP);
|
|
.divide(new BigDecimal(Double.toString(60)), 2, RoundingMode.HALF_UP);
|
|
}
|
|
}
|
|
@@ -175,46 +189,236 @@ class TDSaveLLFDL1MinTest {
|
|
}
|
|
}
|
|
|
|
|
|
HashMap<String, BigDecimal> map2 = new HashMap<>();
|
|
HashMap<String, BigDecimal> map2 = new HashMap<>();
|
|
- for (String key: map1.keySet() ){
|
|
|
|
|
|
+ for (String key : map1.keySet()) {
|
|
Map<Long, BigDecimal> mapValues = map1.get(key);
|
|
Map<Long, BigDecimal> mapValues = map1.get(key);
|
|
- BigDecimal llfdl= BigDecimal.valueOf(0);
|
|
|
|
- for (BigDecimal mapValue : mapValues.values() ) {
|
|
|
|
- llfdl=llfdl.add(mapValue);
|
|
|
|
|
|
+ BigDecimal llfdl = BigDecimal.valueOf(0);
|
|
|
|
+ for (BigDecimal mapValue : mapValues.values()) {
|
|
|
|
+ llfdl = llfdl.add(mapValue);
|
|
}
|
|
}
|
|
- map2.put(key,llfdl);
|
|
|
|
|
|
+ map2.put(key, llfdl);
|
|
}
|
|
}
|
|
- System.out.println(map2);
|
|
|
|
|
|
|
|
- BigDecimal mhsllfdl= BigDecimal.valueOf(0);
|
|
|
|
- BigDecimal nssllfdl= BigDecimal.valueOf(0);
|
|
|
|
- BigDecimal qsllfdl= BigDecimal.valueOf(0);
|
|
|
|
- BigDecimal sbqllfdl= BigDecimal.valueOf(0);
|
|
|
|
- BigDecimal xsllfdl= BigDecimal.valueOf(0);
|
|
|
|
|
|
+ BigDecimal mhsllfdl = BigDecimal.valueOf(0);
|
|
|
|
+ BigDecimal nssllfdl = BigDecimal.valueOf(0);
|
|
|
|
+ BigDecimal qsllfdl = BigDecimal.valueOf(0);
|
|
|
|
+ BigDecimal sbqllfdl = BigDecimal.valueOf(0);
|
|
|
|
+ BigDecimal xsllfdl = BigDecimal.valueOf(0);
|
|
|
|
|
|
- for (String key: map2.keySet()) {
|
|
|
|
- if(key.contains("NX_GDDL_MHS_F_WT_")){
|
|
|
|
- mhsllfdl=mhsllfdl.add(map2.get(key));
|
|
|
|
|
|
+ for (String key : map2.keySet()) {
|
|
|
|
+ if (key.contains("NX_GDDL_MHS_F_WT_")) {
|
|
|
|
+ mhsllfdl = mhsllfdl.add(map2.get(key));
|
|
}
|
|
}
|
|
- if(key.contains("NX_GDDL_NSS_F_WT_")){
|
|
|
|
- nssllfdl=nssllfdl.add(map2.get(key));
|
|
|
|
|
|
+ if (key.contains("NX_GDDL_NSS_F_WT_")) {
|
|
|
|
+ nssllfdl = nssllfdl.add(map2.get(key));
|
|
}
|
|
}
|
|
- if(key.contains("NX_GDDL_QS_F_WT_")){
|
|
|
|
- qsllfdl=qsllfdl.add(map2.get(key));
|
|
|
|
|
|
+ if (key.contains("NX_GDDL_QS_F_WT_")) {
|
|
|
|
+ qsllfdl = qsllfdl.add(map2.get(key));
|
|
}
|
|
}
|
|
- if(key.contains("NX_GDDL_SBQ_F_WT_")){
|
|
|
|
- sbqllfdl=sbqllfdl.add(map2.get(key));
|
|
|
|
|
|
+ if (key.contains("NX_GDDL_SBQ_F_WT_")) {
|
|
|
|
+ sbqllfdl = sbqllfdl.add(map2.get(key));
|
|
}
|
|
}
|
|
- if(key.contains("NX_GDDL_XS_F_WT_")){
|
|
|
|
- xsllfdl=xsllfdl.add(map2.get(key));
|
|
|
|
|
|
+ if (key.contains("NX_GDDL_XS_F_WT_")) {
|
|
|
|
+ xsllfdl = xsllfdl.add(map2.get(key));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ System.out.println("麻黄山理论发电量:" + mhsllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+ System.out.println("牛首山理论发电量:" + nssllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+ System.out.println("青山理论发电量:" + qsllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+ System.out.println("石板泉理论发电量:" + sbqllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+ System.out.println("香山理论发电量:" + xsllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //理论发电量
|
|
|
|
+ @Test
|
|
|
|
+ public void llfdl_1Min1() {
|
|
|
|
+
|
|
|
|
+ //设置取值开始时间
|
|
|
|
+ String startString = startTimeString;
|
|
|
|
+ DateTime startDateTime = DateUtil.parse(startString);
|
|
|
|
+
|
|
|
|
+ //设置取值结束时间
|
|
|
|
+ String endDateString = endTimeString;
|
|
|
|
+ DateTime endDateTime0 = DateUtil.parse(endDateString);
|
|
|
|
+ DateTime endDateTime = DateUtil.endOfDay(endDateTime0);
|
|
|
|
+
|
|
|
|
+ //从pro_basic_equipment(实体类为Equipment)表中获取到所有风机,每台风机型号等
|
|
|
|
+ List<Equipment> equipmentList = equipmentService.list(new QueryWrapper<Equipment>()
|
|
|
|
+ .eq("spare1", "WT")
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ //model_power_details表中获取到所有型号各风速对应的理论功率
|
|
|
|
+ List<ModelPowerDetails> modelPowerDetailsList = modelPowerDetailsService.list();
|
|
|
|
+
|
|
|
|
+ //遍历modelPowerDetailsList,放入map集合中,键为model_id,值为map集合,值的map集合的键为speed,值为theory_power
|
|
|
|
+ Map<String, Map<BigDecimal, Double>> map = new HashMap<>();
|
|
|
|
+ for (ModelPowerDetails modelPowerDetails : modelPowerDetailsList) {
|
|
|
|
+ String modelId = modelPowerDetails.getModelId();
|
|
|
|
+ double speed0 = modelPowerDetails.getSpeed();
|
|
|
|
+ BigDecimal speed = new BigDecimal(speed0).setScale(2, RoundingMode.HALF_EVEN);
|
|
|
|
+ Double theoryPower = modelPowerDetails.getTheoryPower();
|
|
|
|
+
|
|
|
|
+ // 检查是否已存在该modelId的映射关系
|
|
|
|
+ if (map.containsKey(modelId)) {
|
|
|
|
+ // 如果已存在,获取对应的内层HashMap,并添加新的映射关系
|
|
|
|
+ Map<BigDecimal, Double> innerMap = map.get(modelId);
|
|
|
|
+ innerMap.put(speed, theoryPower);
|
|
|
|
+ } else {
|
|
|
|
+ // 如果不存在,创建新的内层HashMap,并添加映射关系
|
|
|
|
+ Map<BigDecimal, Double> innerMap = new HashMap<>();
|
|
|
|
+ innerMap.put(speed, theoryPower);
|
|
|
|
+ map.put(modelId, innerMap);
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
+ //根据uniform_code=AI130从testing_point表中获取到风机的实际功率测点
|
|
|
|
+ List<TestingPoint> testingPointList1 = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
|
+ .eq("uniform_code", "AI022")
|
|
|
|
+ );
|
|
|
|
+ //遍历testingPointList1,把code取出放入一个string集合
|
|
|
|
+ List<String> codeList1 = new ArrayList<>();
|
|
|
|
+ for (TestingPoint testingPoint : testingPointList1) {
|
|
|
|
+ String code = testingPoint.getCode();
|
|
|
|
+ codeList1.add(code);
|
|
|
|
+ }
|
|
|
|
+ //遍历codeList作为适配器的参数,获取到1分钟实际平均功率
|
|
|
|
+ for (String code : codeList1) {
|
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
|
+
|
|
}
|
|
}
|
|
- System.out.println("麻黄山理论发电量:"+mhsllfdl.divide(BigDecimal.valueOf(10000),4,RoundingMode.HALF_EVEN));
|
|
|
|
- System.out.println("牛首山理论发电量:"+nssllfdl.divide(BigDecimal.valueOf(10000),4,RoundingMode.HALF_EVEN));
|
|
|
|
- System.out.println("青山理论发电量:"+qsllfdl.divide(BigDecimal.valueOf(10000),4,RoundingMode.HALF_EVEN));
|
|
|
|
- System.out.println("石板泉理论发电量:"+sbqllfdl.divide(BigDecimal.valueOf(10000),4,RoundingMode.HALF_EVEN));
|
|
|
|
- System.out.println("香山理论发电量:"+xsllfdl.divide(BigDecimal.valueOf(10000),4,RoundingMode.HALF_EVEN));
|
|
|
|
|
|
+
|
|
|
|
+ //根据uniform_code=AI022从testing_point表中获取到风机的风速测点
|
|
|
|
+ List<TestingPoint> testingPointList = testingPointService.list(new QueryWrapper<TestingPoint>()
|
|
|
|
+ .eq("uniform_code", "AI022")
|
|
|
|
+ );
|
|
|
|
+ //遍历testingPointList,把code取出放入一个string集合
|
|
|
|
+ List<String> codeList = new ArrayList<>();
|
|
|
|
+ for (TestingPoint testingPoint : testingPointList) {
|
|
|
|
+ String code = testingPoint.getCode();
|
|
|
|
+ codeList.add(code);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //新建一个map,键为风机编码,值为map集合,值的map集合的键为时间,值为1分钟理论发电量
|
|
|
|
+ Map<String, Map<Long, BigDecimal>> map1 = new HashMap<>();
|
|
|
|
+
|
|
|
|
+ //遍历codeList作为适配器的参数,获取到1分钟平均风速
|
|
|
|
+ for (String code : codeList) {
|
|
|
|
+ List<PointDatas> pointDataList = adapter.getHistoryStat(code, startDateTime.getTime(), endDateTime.getTime(), 60);
|
|
|
|
+
|
|
|
|
+ //遍历testingPointList,根据code取到风机编码thing_id
|
|
|
|
+ for (TestingPoint testingPoint : testingPointList) {
|
|
|
|
+ String code1 = testingPoint.getCode();
|
|
|
|
+ if (code.equals(code1)) {
|
|
|
|
+ String thingId = testingPoint.getThingId();
|
|
|
|
+ //根据thingId从equipmentList中取出型号
|
|
|
|
+ for (Equipment equipment : equipmentList) {
|
|
|
|
+ String nemCode = equipment.getNemCode();
|
|
|
|
+ if (thingId.equals(nemCode)) {
|
|
|
|
+ String modelId = equipment.getModelId();
|
|
|
|
+ //根据modelId从map中取出map集合,键为speed,值为theory_power
|
|
|
|
+ Map<BigDecimal, Double> map2 = map.get(modelId);
|
|
|
|
+ //遍历pointDataList,拿到风速,根据风速从map2中取到理论功率,计算1分钟理论发电量
|
|
|
|
+ for (PointDatas pointData : pointDataList) {
|
|
|
|
+ //风速
|
|
|
|
+ double speed0 = pointData.getAvg().getValue();
|
|
|
|
+ BigDecimal speed = new BigDecimal(speed0).setScale(2, RoundingMode.HALF_EVEN);
|
|
|
|
+
|
|
|
|
+ Double theoryPower = 0.0;
|
|
|
|
+ if (speed0 >= 3 && speed0 <= 25) {
|
|
|
|
+ //理论功率
|
|
|
|
+ theoryPower = map2.get(speed);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //时间
|
|
|
|
+ DateTime dateTime = DateTime.of(pointData.getAvg().getTs());
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ BigDecimal llfdl = BigDecimal.valueOf(0);
|
|
|
|
+ //1分钟理论发电量
|
|
|
|
+ if (theoryPower != null) {
|
|
|
|
+ llfdl = new BigDecimal(Double.toString(theoryPower))
|
|
|
|
+ .multiply(new BigDecimal(Double.toString(1)))
|
|
|
|
+ .divide(new BigDecimal(Double.toString(60)), 2, RoundingMode.HALF_UP);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //存入map1,键为风机编码,值为map集合,值的map集合的键为时间,值为1分钟理论发电量
|
|
|
|
+ if (map1.containsKey(nemCode)) {
|
|
|
|
+ // 如果已存在,获取对应的内层HashMap,并添加新的映射关系
|
|
|
|
+ Map<Long, BigDecimal> innerMap = map1.get(nemCode);
|
|
|
|
+ innerMap.put(dateTime.getTime(), llfdl);
|
|
|
|
+ } else {
|
|
|
|
+ // 如果不存在,创建新的内层HashMap,并添加映射关系
|
|
|
|
+ Map<Long, BigDecimal> innerMap = new HashMap<>();
|
|
|
|
+ innerMap.put(dateTime.getTime(), llfdl);
|
|
|
|
+ map1.put(nemCode, innerMap);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ HashMap<String, BigDecimal> map2 = new HashMap<>();
|
|
|
|
+ for (String key : map1.keySet()) {
|
|
|
|
+ Map<Long, BigDecimal> mapValues = map1.get(key);
|
|
|
|
+ BigDecimal llfdl = BigDecimal.valueOf(0);
|
|
|
|
+ for (BigDecimal mapValue : mapValues.values()) {
|
|
|
|
+ llfdl = llfdl.add(mapValue);
|
|
|
|
+ }
|
|
|
|
+ map2.put(key, llfdl);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ BigDecimal mhsllfdl = BigDecimal.valueOf(0);
|
|
|
|
+ BigDecimal nssllfdl = BigDecimal.valueOf(0);
|
|
|
|
+ BigDecimal qsllfdl = BigDecimal.valueOf(0);
|
|
|
|
+ BigDecimal sbqllfdl = BigDecimal.valueOf(0);
|
|
|
|
+ BigDecimal xsllfdl = BigDecimal.valueOf(0);
|
|
|
|
+
|
|
|
|
+ for (String key : map2.keySet()) {
|
|
|
|
+ if (key.contains("NX_GDDL_MHS_F_WT_")) {
|
|
|
|
+ mhsllfdl = mhsllfdl.add(map2.get(key));
|
|
|
|
+ }
|
|
|
|
+ if (key.contains("NX_GDDL_NSS_F_WT_")) {
|
|
|
|
+ nssllfdl = nssllfdl.add(map2.get(key));
|
|
|
|
+ }
|
|
|
|
+ if (key.contains("NX_GDDL_QS_F_WT_")) {
|
|
|
|
+ qsllfdl = qsllfdl.add(map2.get(key));
|
|
|
|
+ }
|
|
|
|
+ if (key.contains("NX_GDDL_SBQ_F_WT_")) {
|
|
|
|
+ sbqllfdl = sbqllfdl.add(map2.get(key));
|
|
|
|
+ }
|
|
|
|
+ if (key.contains("NX_GDDL_XS_F_WT_")) {
|
|
|
|
+ xsllfdl = xsllfdl.add(map2.get(key));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ System.out.println("麻黄山理论发电量:" + mhsllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+ System.out.println("牛首山理论发电量:" + nssllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+ System.out.println("青山理论发电量:" + qsllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+ System.out.println("石板泉理论发电量:" + sbqllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+ System.out.println("香山理论发电量:" + xsllfdl.divide(BigDecimal.valueOf(10000), 4, RoundingMode.HALF_EVEN));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|