保留三位有效数字—-java

  • Post author:
  • Post category:java


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);
    }

    public static void main(String[] args) {
        Double price = 0.00019865652;
        String v  = formatSignificantDigit(price);
        System.out.println(String.format("%.2f", Math.PI));
        System.out.println(v);
    }



版权声明:本文为phpfzh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。