java 實現前面帶零的數字進行加減運算(保留前面的0)


1.情景展示

  比方說,有一數字000122,進行加法運算+1后,返回000123,如何實現?

2.原因分析

  我們知道,在java中,只要是數字,用代表數字類型的數據類型(byte、short、int、long、double、float、BigDecimal)一旦接收,不管數字前方有幾個0,都會被吃掉。

  所以,我們要想被加數前面有0,必須用字符串來接收,也就是:

  String number = “000122”,而不是int i = 000122;

  要想進行加減運算,我們就必須將其轉換成基本數據類型,進行運算,此時,前面的0已經消失了,所以,我們還要進行補零操作。 

3.解決方案

/*
 * 加法、減法計算(整數之間的運算)
 * @attention: 不支持被加數以0開頭,且被加數+加數>9223372036854775807的整數求和運算
 * BigDecimal支持小數運算,該函數只支持整數之間的運算
 * @date: 2020年11月11日 0011 16:28
 * @param: augend 被加數(前面可以帶0)
 * @param: addend 加數(可以為負數)
 * @return: java.lang.String 返回字符串是因為:如果前面有0,轉數字的話,0會被吞掉
 */
public static String numberAddition(String augend, int addend) {
    if (!isWholeNumber(augend)) return "被加數不是整數,無法進行加法運算";

    // 以0開頭,說明進行加法運算后需要進行補零操作
    if (augend.startsWith("0")) {
        // 校驗是否大於long類型的最大值:9223372036854775807
        long augendNum;
        try {
            // 因為String.format()不支持BigDecimal運算,只支持基本數據類型,所以無法調用format()直接進行補零操作
            augendNum = Long.parseLong(augend);
        } 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" + augend.length() + "d", Long.parseLong(augend) + addend);
    }

    if (!augend.startsWith("0")) {
        // 被加數不以0開頭且被加數+加數>9223372036854775807
        BigDecimal resultBg = new BigDecimal(augend).add(new BigDecimal(addend));
        if (resultBg.compareTo(new BigDecimal(Long.MAX_VALUE)) == 1) {
            return String.valueOf(resultBg);
        } else {
            // 正常的整數運算
            return String.valueOf(Long.parseLong(augend) + addend);
        }
    }

    // 不會執行(走不到這兒)
    return "";
}

4.測試

public static void main(String[] args) {
    System.out.println(numberAddition("2020111100017420201111000174", 1));
    System.out.println(numberAddition("00009223372036854775806", 1));
    System.out.println(numberAddition("009223372036854775807", 2));
    System.out.println(numberAddition("0000134", 1));
    System.out.println(numberAddition("122", 1));
}

 

 

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM