• 工具类系列【适用场景:有一数字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 "";
        }
    }
  • 相关阅读:
    SQLAlchemy介绍
    Flask介绍
    逆转的生殖——形而下的EOE补完仪式…
    huiyin
    实验课上
    我的博客今天1岁213天了,我领取了…
    关于直接写屏
    OceanBorn&nbsp;&nbsp;歌曲列表
    Gethsemane
    光辉岁月-Beyond
  • 原文地址:https://www.cnblogs.com/hujunwei/p/15931211.html
Copyright © 2020-2023  润新知