科学计数格式化工具类
示例:
-0.000008 ===> -8.0010^-5
734536.19275 ===> 7.3510^5
package com.common.utils;
import cn.hutool.core.util.NumberUtil;
import com.htht.common.core.text.Convert;
public class ScientificCountingFormat {
/**
* 科学计数法格式化-0.000008 ===> -8.00*10^-5
* @param number -0.000008
* @return String -8.00*10^-5
*/
public static String numberFormat(String number) {
boolean flag = true;
String firstChar = "";
if (StringUtils.isEmpty(number) || "-".equals(number)|| "0".equals(number) || number.chars().filter(x -> x == '.').count() != 1) {
return "-";
}
// 小数点所在位置
int pointIndexOf = number.indexOf(".");
// 第一个不为0的数的位置
int numberIndexOf = 0;
if (number.charAt(0) == '-') {
firstChar = "-";
}
number = number.replace(".", "").replaceFirst("-", "");
for (int i = 0; i < number.split("").length; i++) {
if (!NumberUtil.isNumber(number.split("")[i])) {
return "-";
}
// 获取第一个不为0的数的位置
if (Convert.toInt(number.split("")[i]) != 0 && flag) {
numberIndexOf = i;
flag = false;
}
}
// 科学计数
int value = pointIndexOf - numberIndexOf - 1;
// 去0后获取前两位小数
number = number.replaceAll("0", "");
// 保持梁文小数,不足时在后补0
number = StringUtils.isEmpty(number) ? "0" : number;
number = number.substring(0, 1) + "." + number.substring(1, number.length());
if (NumberUtil.equals(Convert.toDouble(number), 0)) {
return "0";
}
return firstChar + NumberUtil.round(Convert.toDouble(number), 2) + (value == 0 ? "" : "*10^" + value);
}
public static void main(String[] args) {
System.out.println(ScientificCountingFormat.numberFormat("-0.000008"));
System.out.println(ScientificCountingFormat.numberFormat("734536.19275"));
}
}