定制一款只保留4~7位小数的工具类,规则:小数位不足4位,补0;小数位超过4位,如果末尾是0,去除末尾的0且保留7位小数。
代码如下:
public class DecimalUtils {
static final Integer NUMBER_FOUR_DECIMAL = 4;
static final Integer NUMBER_SEVEN_DECIMAL = 7;
public static String assignDecimal(String weight) {
//不为空
if (StringUtils.isNotEmpty(weight)) {
//如果是零
if (weight.startsWith("0") ) {
return "0.0000";
}
//1.整数,直接在后面补四个零
if (!weight.contains(".")) {
weight = new BigDecimal(weight).setScale(NUMBER_FOUR_DECIMAL, BigDecimal.ROUND_DOWN).toString();
return weight;
}
//2.非整数
//去除末尾0
String targetStr = new BigDecimal(weight).setScale(NUMBER_SEVEN_DECIMAL, BigDecimal.ROUND_DOWN).toString();
targetStr = new BigDecimal(targetStr).stripTrailingZeros().toPlainString();
int length = targetStr.substring(targetStr.indexOf(".") + 1).length();
if (length <= NUMBER_FOUR_DECIMAL) {
targetStr = new BigDecimal(targetStr).setScale(NUMBER_FOUR_DECIMAL).toString();
}
return targetStr;
}else{
return "0.0000";
}
}
public static void main(String[] args) {
System.out.println(assignDecimal("221.000"));
System.out.println(assignDecimal("221"));
System.out.println(assignDecimal("221.1010"));
System.out.println(assignDecimal("221.101"));
System.out.println(assignDecimal("2211011111"));
System.out.println(assignDecimal("221.10111110"));
System.out.println(assignDecimal(""));
System.out.println(assignDecimal("0.00"));
}
}
测试结果: