/**
* 字符串转bigdecimal再转字符串
*
* @param number bigDecimal数字
* @return bigDecimal数字字符串
*/
public static String str2Str(String number) {
// 无小数
if (!number.contains(".")) {
return number;
} else {
String[] split = number.split("\\.");
// 有小数点无小数位
if (ArrayUtil.isEmpty(split) || split.length == 1) {
return split[0];
} else {
String b = split[1];
// 小数位全为0
String regex = "^[0]*$";
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(b);
if (matcher.find()) {
return split[0];
}
// 存在非零
// 整数位
StringBuilder s1 = new StringBuilder(split[0]);
s1.append(".");
String[] split1 = b.split("");
// 只有2位以内小数
if (split1.length < 3) {
return number;
}
// 大于两位小数
// 有效数字位数
int count = 0;
// 末位数字
StringBuilder last = new StringBuilder("0.");
// 遍历计算每个数字
for (String s : split1) {
// 如果为0则拼接
if ("0".equals(s)) {
s1.append("0");
}
// 非零进行判断
if (!"0".equals(s)) {
// 如果非零数字个数小于2,直接拼接
if (count < 2) {
s1.append(s);
} else {
// 如果不小于于2
// 获取当前位置值的大小,如果需要进位
if (Integer.parseInt(s) > 4) {
// 末位数字最后一位改成进位1
String sub = StrUtil.sub(last, 0, last.length() - 1);
last = new StringBuilder(sub + "1");
}
break;
}
count++;
}
last.append("0");
}
BigDecimal bigDecimal1 = new BigDecimal(String.valueOf(s1));
BigDecimal bigDecimal2 = new BigDecimal(String.valueOf(last));
return bigDecimal1.add(bigDecimal2).stripTrailingZeros().toPlainString();
}
}
}
如果需要最后一位不把进位的0舍去,请在最后add处设置保留位数