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 版权协议,转载请附上原文出处链接和本声明。