tangzy
2021-10-20 87204491aac135822f96f3fff297ddca400ea8c9
src/main/java/org/springblade/modules/river/controller/RiverRController.java
@@ -435,8 +435,10 @@
                     if (selecthd.get(i).get("Q") == null) {
                        texta += "流量暂无数据、";
                     } else {
                        DecimalFormat dfl = new DecimalFormat("#0.000");
                        texta += "流量" + Q + "立方米每秒;";
                        //DecimalFormat dfl = new DecimalFormat("#0.000");
                        //texta += "流量" + Q + "立方米每秒;";
                        String vc  = formatSignificantDigit(Q);
                        texta += "流量" + vc + "立方米每秒;";
                     }
                  }
               }
@@ -652,8 +654,8 @@
                        if (selecthd.get(i).get("Q") == null) {
                           texta += "流量暂无数据";
                        } else {
                           DecimalFormat dfs = new DecimalFormat("#0.000");
                           texta += "流量" + Q + "立方米每秒;";
                           String vc  = formatSignificantDigit(Q);
                           texta += "流量" + vc + "立方米每秒;";
                        }
                     }
                  }
@@ -679,7 +681,8 @@
                           texta += "流量暂无数据;";
                        } else {
                           //DecimalFormat dfs = new DecimalFormat("#0.000");
                           texta += "流量" + Q + "立方米每秒;";
                           String vc  = formatSignificantDigit(Q);
                           texta += "流量" + vc + "立方米每秒;";
                        }
                     }
                  }
@@ -708,4 +711,39 @@
      return R.data(list);
   }
   public static int magnitude(Double price){
      if (price == 0.0) {return 0;}
      int fac;
      Long i;
      Long k = 10L;
      if (price > 1) {
         i = price.longValue();
         fac = 0;
         while (i / k != 0L) {
            fac++;
            k *= 10;
         }
      } else {
         fac = -1;
         while (price * k < 1) {
            fac--;
            k *= 10;
         }
      }
      return fac;
   }
   /**
    * 数字格式化 - 最少保留{num}位有效数字 - 保留 {min}~{max} 为小数 - format02
    */
   public static String formatSignificantDigit(Double price) {
      int min = 2;
      int max= 8;
      int num = 3;
      boolean sign = false;
      Double rate = 1.0;
      Double value = price * rate;
      int level = magnitude(Math.abs(value));
      int count = Math.max(min, Math.min(max, num - level - 1));
      return String.format("%"+(sign?"+": "")+"."+count + "f", value);
   }
}