工具类系列---【适用场景:有一数字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 "";
    }
}

 

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 "";
}
}
上一篇:Vue 组件通信


下一篇:1152 Google Recruitment (20 分)(字符串处理)