我是靠谱客的博主 虚拟曲奇,最近开发中收集的这篇文章主要介绍工具类篇【二】BigDecimal计算,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

工具类篇大全

工具类篇【一】String字符串

工具类篇【二】BigDecimal计算

工具类篇【三】日期Date转换

工具类篇【四】日志脱敏

工具类篇【五】Random随机生成字符串

工具类篇【六】克隆对象的2种常用方法


 

前言

BigDecimal作为Java中常用的金额计算类,由于金额计算涉及小数点甚至四舍五入计数法等。其他数据类型如:Double、Float、Integer、Long等都不能作为一个企业的标准金额计算工具。经常有人用除BigDecimal以外的其他类型计算金额,导致计算结果有误,要么少了小数点,要么多了小数点,要么报错等等。因此,作为一名合格的程序员,强调用BigDecimal作为基本金额计算类显得尤为重要。

一、BigDecimal、Double、String互转

入参为Double,返回小数点后指定位数的数值

public static Double setScaleUp(Double value, int scale) {

		BigDecimal bd = BigDecimal.valueOf(value.doubleValue());
		return Double.valueOf(bd.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue());
	}

获取指定小数点位数的值,并四舍五入

	/** 截取小数点位
	 *  @author 
	 *	@DateTime 2018年10月16日 上午9:58:52
	 *
	 *  @param value
	 *  @param scale
	 *  @return
	 */
	public static BigDecimal setScaleByBigDecimalDown(BigDecimal value, int scale) {
		return value.setScale(scale, BigDecimal.ROUND_DOWN);
	}

Double转Bigdecimal

	public static BigDecimal convertDoubleToBigdecimal(Double d1) {
		return BigDecimal.valueOf(d1 == null ? 0 : d1);
	}

BigDecimal转Double

	/**
	 * 转换BigDecimal 到double
	 * @author 
	 * @DateTime 2017年11月11日 上午10:14:44
	 *
	 * @param bigDecimal
	 * @return
	 */
	public static Double convertBigDecimalToDouble(BigDecimal bigDecimal) {
		return bigDecimal == null ? null : bigDecimal.doubleValue();
	}

String转BigDecimal

public static BigDecimal converStringToBigdecimal(String st, int scale) {
		if (StringUtils.isEmpty(st)) {
			return BigDecimal.ZERO;
		} else {
			return FcsNumberUtils.setScaleOfBigDecimal(new BigDecimal(st), scale);
		}
	}

BigDecimal转String

	public static String bigdecimalToString(BigDecimal b1) {

		if (b1 == null) {
			return "0";
		} else {
			return b1.toString();
		}
	}

Double转String

	public static String doubleToString(Double b1) {

		if (b1 == null) {
			return "0";
		} else {
			return b1.toString();
		}
	}

BigDecimal转Long

    public static Long convertBigDecimalToLong(BigDecimal bigDecimal) {
        return bigDecimal == null ? null : bigDecimal.longValue();
    }

二、常用计算方法

BigDecimal比较大小

    /**
	 * @author 
	 * @DateTime 2018年1月16日 上午10:37:55
	 *
	 * @param b1
	 * @param b2
	 * @return
	 */
	public static boolean compareToOnBigDecimal(BigDecimal b1, BigDecimal b2) {

		if (b1 == null) {
			b1 = BigDecimal.ZERO;
		}
		if (b2 == null) {
			b2 = BigDecimal.ZERO;
		}
		if (b1.compareTo(b2) == 0) {
			return true;
		} else {
			return false;
		}
	}

BigDecimal加法计算

	public static BigDecimal addOfBigDecimal(BigDecimal d1, BigDecimal d2, int scale) {

		if (d1 == null) {
			d1 = BigDecimal.ZERO;
		}
		if (d2 == null) {
			d2 = BigDecimal.ZERO;
		}
		return FcsNumberUtils.addOfBigDecimal(d1, d2, scale);
	}

BigDecimal减法计算

	/**
	 *  @author  
	 *	@DateTime 2018年3月23日 下午5:30:06
	 *
	 *  @param d1
	 *  @param d2
	 *  @param scale
	 *  @return
	 */
	public static BigDecimal subtractOfBigDecimal(BigDecimal d1, BigDecimal d2, int scale) {

		if (d1 == null) {
			d1 = BigDecimal.ZERO;
		}
		if (d2 == null) {
			d2 = BigDecimal.ZERO;
		}
		if (scale <= 0) {
			scale = 2;
		}
		BigDecimal bd = d1.subtract(d2);
		return bd.setScale(scale, BigDecimal.ROUND_HALF_UP);
	}

BigDecimal乘法计算

    public static BigDecimal multiplyOfBigDecimal(BigDecimal d1, BigDecimal d2, int scale) {
        return multiplyOfBigDecimal(d1, d2).setScale(scale, 4);
    }

    public static BigDecimal multiplyOfBigDecimal(BigDecimal d1, BigDecimal d2) {
        return d1.multiply(d2);
    }

BigDecimal除法计算


    public static BigDecimal divideOfBigDecimal(BigDecimal d1, BigDecimal d2, int scale) {
        return divideOfBigDecimal(d1, d2).setScale(scale, 4);
    }

    public static BigDecimal divideOfBigDecimal(BigDecimal d1, BigDecimal d2) {
        return d1.divide(d2, 16, 4);
    }

Double加法计算

	public static Double addOfDouble(Double d1, Double d2, int scale) {

		if (d1 == null) {
			d1 = 0.00D;
		}

		if (d2 == null) {
			d2 = 0.00D;
		}

		Double result = FcsNumberUtils.add(d1, d2, scale);

		return (result.doubleValue() == 0.00) ? null : result;
	}

Double是否相等判断

	/**
	 * @author 
	 * @DateTime 2017年8月24日 下午1:48:52
	 *
	 * @param d1
	 * @param d2
	 * @return
	 */
	public static boolean doubleIsEquals(Double d1, Double d2) {

		if (d1 == null) {
			d1 = 0.00d;
		}

		if (d2 == null) {
			d2 = 0.00d;
		}

		BigDecimal dd1 = BigDecimal.valueOf(setScaleUp(d1, 2));
		BigDecimal dd2 = BigDecimal.valueOf(setScaleUp(d2, 2));
		int retval = dd1.compareTo(dd2);

		if (retval == 0) {
			return true;
		} else {
			return false;
		}
	}

Double减法计算

	/**
	 *  @author 
	 *	@DateTime 2018年3月23日 下午5:30:06
	 *
	 *  @param d1
	 *  @param d2
	 *  @param scale
	 *  @return
	 */
	public static Double subtractOfBigDouble(Double d1, Double d2, int scale) {

		if (d1 == null) {
			d1 = new Double(0);
		}

		if (d2 == null) {
			d2 = new Double(0);
		}

		if (scale <= 0) {
			scale = 2;
		}
		return FcsNumberUtils.subtract(d1, d2, scale);

	}

Double乘法计算

    public static Double multiply(Double d1, Double d2, int scale) {
        return BigDecimal.valueOf(multiply(d1, d2)).setScale(scale, 4).doubleValue();
    }

Double除法计算

    public static Double divide(Double d1, Double d2, int scale) {
        return BigDecimal.valueOf(divide(d1, d2)).setScale(scale, 4).doubleValue();
    }

BigDecimal绝对值

	public static BigDecimal negateByBigDecimal(BigDecimal bigdecimal) {
		if (bigdecimal == null) {
			return null;
		}
		return bigdecimal.negate();
	}

三、总结

在开发中,一个项目总会需要涉及到计算,如金额的计算、数字的计算、计数等。一旦涉及到计算就会少不了要使用以上类和工具。整理和定义一个工具类,将为编码工作省下极大的便利。工欲善其事必先利其器。


既然都看完了整篇文章,相信对你一定有所帮助。原创不易,勿做伸手党。

点击下方【打赏】小编,或者关注公众号给予支持,你们的每一份鼓励都将是小编伟大的动力。


同名原创公众号:    程序大视界

 

最后

以上就是虚拟曲奇为你收集整理的工具类篇【二】BigDecimal计算的全部内容,希望文章能够帮你解决工具类篇【二】BigDecimal计算所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部