美文网首页
BigDecimal

BigDecimal

作者: ThornFUN | 来源:发表于2019-04-22 16:14 被阅读0次

    构造方法

    • BigDecimal(double val) //不推荐
    • BigDecimal(String str)
    • BigDecimal(BigInteger val)
    • BigDecimal(BigInteger unscaledVal, int scale)

    工具类代码

    public class BigDecimalUtils {
            /**
             * 提供精确的加法运算
             *
             * @param v1 被加数
             * @param v2 加数
             * @param scale 保留scale 位小数
             * @return 两个参数的和
             */
            public static String add(String v1, String v2, int scale) {
                if (scale < 0) {
                    throw new IllegalArgumentException("保留的小数位数必须大于零");
                }
                BigDecimal b1 = new BigDecimal(v1);
                BigDecimal b2 = new BigDecimal(v2);
                return b1.add(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
            }
     
            /**
             * 提供精确的减法运算
             *
             * @param v1 被减数
             * @param v2 减数
             * @param scale 保留scale 位小数
             * @return 两个参数的差
             */
            public static String sub(String v1, String v2, int scale) {
                if (scale < 0) {
                    throw new IllegalArgumentException("保留的小数位数必须大于零");
                }
                BigDecimal b1 = new BigDecimal(v1);
                BigDecimal b2 = new BigDecimal(v2);
                return b1.subtract(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
            }
     
            /**
             * 提供精确的乘法运算
             *
             * @param v1 被乘数
             * @param v2 乘数
             * @param scale 保留scale 位小数
             * @return 两个参数的积
             */
            public static String mul(String v1, String v2, int scale) {
                if (scale < 0) {
                    throw new IllegalArgumentException("保留的小数位数必须大于零");
                }
                BigDecimal b1 = new BigDecimal(v1);
                BigDecimal b2 = new BigDecimal(v2);
                return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
            }
     
            /**
             * 提供精确的除法运算。当发生除不尽的情况时,由scale参数指定精度,以后的数字四舍五入
             *
             * @param v1 被除数
             * @param v2 除数
             * @param scale 表示需要精确到小数点以后几位
             * @return 两个参数的商
             */
            public static String div(String v1, String v2, int scale) {
                if (scale < 0) {
                    throw new IllegalArgumentException("保留的小数位数必须大于零");
                }
                BigDecimal b1 = new BigDecimal(v1);
                BigDecimal b2 = new BigDecimal(v2);
                return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString();
            }
     
            /**
             * 提供精确的小数位四舍五入处理
             *
             * @param v 需要四舍五入的数字
             * @param scale 小数点后保留几位
             * @return 四舍五入后的结果
             */
            public static double round(double v, int scale) {
                if (scale < 0) {
                    throw new IllegalArgumentException("保留的小数位数必须大于零");
                }
                BigDecimal b = new BigDecimal(Double.toString(v));
                return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
            }
     
            /**
             * 提供精确的小数位四舍五入处理
             *
             * @param v 需要四舍五入的数字
             * @param scale 小数点后保留几位
             * @return 四舍五入后的结果
             */
            public static String round(String v, int scale) {
                if (scale < 0) {
                    throw new IllegalArgumentException("保留的小数位数必须大于零");
                }
                BigDecimal b = new BigDecimal(v);
                return b.setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
            }
     
            /**
             * 取余数
             *
             * @param v1 被除数
             * @param v2 除数
             * @param scale 小数点后保留几位
             * @return 余数
             */
            public static String remainder(String v1, String v2, int scale) {
                if (scale < 0) {
                    throw new IllegalArgumentException("保留的小数位数必须大于零");
                }
                BigDecimal b1 = new BigDecimal(v1);
                BigDecimal b2 = new BigDecimal(v2);
                return b1.remainder(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
            }
     
            /**
             * 比较大小
             *
             * @param v1 被比较数
             * @param v2 比较数
             * @return 如果v1 大于v2 则 返回true 否则false
             */
            public static boolean compare(String v1, String v2) {
                BigDecimal b1 = new BigDecimal(v1);
                BigDecimal b2 = new BigDecimal(v2);
                int bj = b1.compareTo(b2);
                if (bj > 0)
                    return true;
                else
                    return false;
            }
    }
    
    

    相关文章

      网友评论

          本文标题:BigDecimal

          本文链接:https://www.haomeiwen.com/subject/pxqugqtx.html