• <big id="iig5e"><em id="iig5e"></em></big>

  • <big id="iig5e"><em id="iig5e"></em></big>
    <th id="iig5e"><option id="iig5e"></option></th>
    <th id="iig5e"><option id="iig5e"></option></th>
    <th id="iig5e"><video id="iig5e"></video></th>

  • 景安微信
    右側QQ聯系不上,可以加我微信
    您好,歡迎來到景安網絡!
    加盟景安
    主頁 >服務器技術 >最全bigdecimal加減乘除運算封裝

    最全bigdecimal加減乘除運算封裝


    來源:景安網絡發表日期:2018-06-10瀏覽次數:Tags:bigdecimal
    景安網絡專業的數據中心服務商,長期提供數據中心托管服務,私有云,互聯網解決方案,互聯網增值服務。針對工信委大力實施“萬企業上云”計劃,景安以我所能,為你而+,推出上云特惠,核心云計算產品降幅達50%!!也歡迎來聊右側qq

    日常對于金額計算,應該都是用的BigDecimal,  可是苦于沒有好的工具類方法,現在貢獻一個我正在用的對于數字計算的工具類,項目中就是用的這個,簡單粗暴好用,話不多說,代碼奉上(該工具類需要引入google的一個jar  ,com.google.common.base.Optional,具體maven引入看文章末尾):

    bigdecimal

    [java] view plain copy

    1. import java.math.BigDecimal;  

    2.   

    3. public class NumberArithmeticUtils {  

    4.       

    5.       

    6.     /** 

    7.      * BigDecimal的加法運算封裝 

    8.      * @author : shijing 

    9.      * 2017年3月23日下午4:53:21 

    10.      * @param b1 

    11.      * @param bn 

    12.      * @return 

    13.      */  

    14.    public static BigDecimal safeAdd(BigDecimal b1, BigDecimal... bn) {  

    15.        if (null == b1) {  

    16.            b1 = BigDecimal.ZERO;  

    17.        }  

    18.        if (null != bn) {  

    19.            for (BigDecimal b : bn) {  

    20.                b1 = b1.add(null == b ? BigDecimal.ZERO : b);  

    21.            }  

    22.        }  

    23.        return b1;  

    24.    }  

    25.   

    26.    /** 

    27.     * Integer加法運算的封裝 

    28.     * @author : shijing 

    29.     * 2017年3月23日下午4:54:08 

    30.     * @param b1   第一個數 

    31.     * @param bn   需要加的加法數組 

    32.     * @注 : Optional  是屬于com.google.common.base.Optional<T> 下面的class 

    33.     * @return 

    34.     */  

    35.    public static Integer safeAdd(Integer b1, Integer... bn) {  

    36.        if (null == b1) {  

    37.            b1 = 0;  

    38.        }  

    39.        Integer r = b1;  

    40.        if (null != bn) {  

    41.            for (Integer b : bn) {  

    42.                r += Optional.fromNullable(b).or(0);  

    43.            }  

    44.        }  

    45.        return r > 0 ? r : 0;  

    46.    }  

    47.   

    48.    /** 

    49.     * 計算金額方法 

    50.     * @author : shijing 

    51.     * 2017年3月23日下午4:53:00 

    52.     * @param b1 

    53.     * @param bn 

    54.     * @return 

    55.     */  

    56.    public static BigDecimal safeSubtract(BigDecimal b1, BigDecimal... bn) {  

    57.        return safeSubtract(true, b1, bn);  

    58.    }  

    59.   

    60.    /** 

    61.     * BigDecimal的安全減法運算 

    62.     * @author : shijing 

    63.     * 2017年3月23日下午4:50:45 

    64.     * @param isZero  減法結果為負數時是否返回0,true是返回0(金額計算時使用),false是返回負數結果 

    65.     * @param b1        被減數 

    66.     * @param bn        需要減的減數數組 

    67.     * @return 

    68.     */  

    69.    public static BigDecimal safeSubtract(Boolean isZero, BigDecimal b1, BigDecimal... bn) {  

    70.        if (null == b1) {  

    71.            b1 = BigDecimal.ZERO;  

    72.        }  

    73.        BigDecimal r = b1;  

    74.        if (null != bn) {  

    75.            for (BigDecimal b : bn) {  

    76.                r = r.subtract((null == b ? BigDecimal.ZERO : b));  

    77.            }  

    78.        }  

    79.        return isZero ? (r.compareTo(BigDecimal.ZERO) == -1 ? BigDecimal.ZERO : r) : r;  

    80.    }  

    81.   

    82.    /** 

    83.     * 整型的減法運算,小于0時返回0 

    84.     * @author : shijing 

    85.     * 2017年3月23日下午4:58:16 

    86.     * @param b1 

    87.     * @param bn 

    88.     * @return 

    89.     */  

    90.    public static Integer safeSubtract(Integer b1, Integer... bn) {  

    91.        if (null == b1) {  

    92.            b1 = 0;  

    93.        }  

    94.        Integer r = b1;  

    95.        if (null != bn) {  

    96.            for (Integer b : bn) {  

    97.                r -= Optional.fromNullable(b).or(0);  

    98.            }  

    99.        }  

    100.        return  != r && r > 0 ? r : 0;  

    101.    }  

    102.   

    103.    /** 

    104.     * 金額除法計算,返回2位小數(具體的返回多少位大家自己看著改吧) 

    105.     * @author : shijing 

    106.     * 2017年3月23日下午5:02:17 

    107.     * @param b1 

    108.     * @param b2 

    109.     * @return 

    110.     */  

    111.    public static <T extends Number> BigDecimal safeDivide(T b1, T b2){  

    112.        return safeDivide(b1, b2, BigDecimal.ZERO);  

    113.    }  

    114.   

    115.    /** 

    116.     * BigDecimal的除法運算封裝,如果除數或者被除數為0,返回默認值 

    117.     * 默認返回小數位后2位,用于金額計算 

    118.     * @author : shijing 

    119.     * 2017年3月23日下午4:59:29 

    120.     * @param b1 

    121.     * @param b2 

    122.     * @param defaultValue 

    123.     * @return 

    124.     */  

    125.    public static <T extends Number> BigDecimal safeDivide(T b1, T b2, BigDecimal defaultValue) {  

    126.        if (null == b1 ||  null == b2) {  

    127.            return defaultValue;  

    128.        }  

    129.        try {  

    130.            return BigDecimal.valueOf(b1.doubleValue()).divide(BigDecimal.valueOf(b2.doubleValue()), 2, BigDecimal.ROUND_HALF_UP);  

    131.        } catch (Exception e) {  

    132.            return defaultValue;  

    133.        }  

    134.    }  

    135.   

    136.    /** 

    137.     * BigDecimal的乘法運算封裝 

    138.     * @author : shijing 

    139.     * 2017年3月23日下午5:01:57 

    140.     * @param b1 

    141.     * @param b2 

    142.     * @return 

    143.     */  

    144.    public static <T extends Number> BigDecimal safeMultiply(T b1, T b2) {  

    145.        if (null == b1 ||  null == b2) {  

    146.            return BigDecimal.ZERO;  

    147.        }  

    148.        return BigDecimal.valueOf(b1.doubleValue()).multiply(BigDecimal.valueOf(b2.doubleValue())).setScale(2, BigDecimal.ROUND_HALF_UP);  

    149.    }  

    150.   

    151. }  


    Optional所在的jar以及版本:guava-18.0.ar

     

    pom.xml配置:

     

    [html] view plain copy

    1. <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->  

    2. <dependency>  

    3.     <groupId>com.google.guava</groupId>  

    4.     <artifactId>guava</artifactId>  

    5.     <version>18.0</version>  

    6. </dependency>  

    0(好文)
    0(太水)
    版權聲明:部分文章源于網絡,如侵權請聯系我們刪除
    1元上云

    專題頁

    色播