BigDecimal 类的使用(钱的计算)

钱的计算: 可能会损失精度; 

BigDecimal 类进行计算; 

https://blog.csdn.net/shadow_zed/article/details/73478298

BigDecimal比较大小问题

BigDecimal 的API使用:

public int compareTo(BigDecimal val)

将此 BigDecimal 与指定的 BigDecimal 比较。根据此方法,值相等但具有不同标度的两个 BigDecimal 对象(如,2.0 和 2.00)被认为是相等的。相对六个 boolean 比较运算符 (<, ==, >, >=, !=, <=) 中每一个运算符的各个方法,优先提供此方法。建议使用以下语句执行上述比较:(x.compareTo(y) <op> 0),其中 <op> 是六个比较运算符之一。

指定者:  接口 Comparable<BigDecimal> 中的 compareTo

参数:    val - 将此 BigDecimal 与之比较的 BigDecimal。

返回:         当此 BigDecimal 在数字上小于、等于或大于 val 时,返回 -1、0 或 1。

 

Double double  = 1.0;
Boulean flag = double .compareTo(0.0) > 0 ; 

/*其实俩个Double类似的数值可以按照比较 ; 
*/

 

package utils;

import java.math.BigDecimal;

/**
 * @Description:  金额精确运算处理类
 * @date 2016年3月22日
 *
 */
public class BigdecimalUtil {

	private static final String BIGDECIMAL_ADD = "add";				// 加法运算
	private static final String BIGDECIMAL_SUBTRACT = "subtract";	// 减法运算
	private static final String BIGDECIMAL_MULTIPLY = "multiply";	// 乘法运算
	private static final String BIGDECIMAL_DIVIDE = "divide";		// 除法运算
	private static final int 	BIGDECIMAL_NEWINDEX = 2;			// 精确运算,取*位小数

	/**
	 * @Description:	对两个Double 数据进行精确运算
	 * @param d1 Double
	 * @param d2 Double
	 * @param str add、subtract、multiply、divide
	 * @return Double
	 * @throws
	 */
	public static Double bigdecimalAPI(Double d1, Double d2, String str){
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		BigDecimal bigDecimal = null;
		if (BIGDECIMAL_ADD.equals(str)) {
			bigDecimal = b1.add(b2);
		}
		if (BIGDECIMAL_SUBTRACT.equals(str)) {
			bigDecimal = b1.subtract(b2);
		}
		if (BIGDECIMAL_MULTIPLY.equals(str)) {
			bigDecimal = b1.multiply(b2);
		}
		if (BIGDECIMAL_DIVIDE.equals(str)) {
			bigDecimal = b1.divide(b2, BIGDECIMAL_NEWINDEX, BigDecimal.ROUND_HALF_UP);
		}

		BigDecimal setScale = bigDecimal.setScale(BIGDECIMAL_NEWINDEX, BigDecimal.ROUND_HALF_UP);//取2位小数,四舍五入
BigDecimal.ROUND_HALF_DOWN);//取2位小数,四舍五入,但是5也是舍弃
		return Double.parseDouble(setScale.toString());
	}

	
	
	

 

总结:

1.BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;

2.当为任何输入参数传递 null 对象引用时,此类的所有方法和构造方法都将抛出 NullPointerException。提前进行空值判断; 

3.工具类的健壮性很重要;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值