工具类系列---【适用场景:有一数字000122,进行加法运算+1后,返回000123】
代码如下
package com.byjk.finance.common; import java.math.BigDecimal; import static com.alibaba.fastjson.util.TypeUtils.isNumber; /** * @author hujw * @since 2022/2/23 */ public class NumberUtil { /** * 适用场景:有一数字000122,进行加法运算+1后,返回000123 * * @param num 加数 * @param addend 被加数 * @return String */ public static String numberAddition(String num, int addend) { if (!isNumber(num)) return "被加数不是整数,无法进行加法运算"; // 以0开头,说明进行加法运算后需要进行补零操作 if (num.startsWith("0")) { // 校验是否大于long类型的最大值:9223372036854775807 long augendNum; try { // 因为String.format()不支持BigDecimal运算,只支持基本数据类型,所以无法调用format()直接进行补零操作 augendNum = Long.parseLong(num); } catch (NumberFormatException n) { return "被加数>long类型的最大值9223372036854775807"; } long result = augendNum + addend; // 被加数>0,被加数>加数的绝对值,这样result肯定应该大于0 if (augendNum > 0 && augendNum > Math.abs(addend) && result < 0) { return "被加数以0开头,且被加数+加数>long类型的最大值9223372036854775807"; } // 字符串转数字,前面的0会消失(按原来的长度进行补零) // return String.format("%0" + augend.length() + "d", Integer.parseInt(augend) + addend); return String.format("%0" + num.length() + "d", Long.parseLong(num) + addend); } if (!num.startsWith("0")) { // 被加数不以0开头且被加数+加数>9223372036854775807 BigDecimal resultBg = new BigDecimal(num).add(new BigDecimal(addend)); if (resultBg.compareTo(new BigDecimal(Long.MAX_VALUE)) == 1) { return String.valueOf(resultBg); } else { // 正常的整数运算 return String.valueOf(Long.parseLong(num) + addend); } } // 不会执行(走不到这儿) return ""; } }