java BigDecimal 浮点数精确计算

更加精确使用浮点数:

在计算机中所有的数字都是使用二进制进行存储的,而二进制无法精确的表示所有小数,所以使用基本的数据类型进行小数运算会有一些误差,比如有某件商品的价格是1.1元,而顾客现有的金额是2元。

public class main {
	public static void main(String[] args) {	
		System.out.print(2-1.1);
	}
}

运行结果为:

虽然误差很小,但是如果用于货币运算,货币运算可能操作多个有误差的运算结果,长期的数据累计会造成更大的误差(比如银行的系统运算)

如果需要完成浮点数精确计算,则可以使用BigDecimal类,它用于大数字的精确计算。

  • 加法:实现两个BigDecimal类实例对象的加法运算,并将运算结果作为方法的返回值

public BigDecimal add(BigDecimal augend);

augend:与当前对执行加法的操作数

  • 减法:实现两个BigDecimal类实例对象的减法运算,并将运算结果作为方法的返回值

public BigDecimal subtract(BigDecimal subtrahend);

subtrahend:被当前对象执行减法的操作数。

  • 乘法:实现两个BigDecimal类实例对象的乘法运算,并将运算结果作为方法的返回值

public BigDecimal multiply(BigDecimal multiplicand);

multiplicand:乘法运算中的乘数

  • 除法:实现两个BigDecimal类实例对象的除法运算,并将运算结果作为方法的返回值

public BigDecimal divide(BigDecimal divisor);

divisor:除法运算中的除数

注意:在创建BigDecimal类实例时,在构造方法中一定要使用数字字符串作为参数。如果直接使用点数或该类型的变量作为参数,那么构造方法接收的是经过二进制存储的浮点数,如果这样就会是不精确的浮点数。

import java.math.BigDecimal;

public class main {
	public static void main(String[] args) {	
		double money=2;
		double price=1.1;
		System.out.println("非精确计算结果为:"+(money-price));
		BigDecimal money1= new BigDecimal(String.valueOf(money));//定义BigDecimal的实例,使                                                                 
		BigDecimal price1= new BigDecimal(String.valueOf(price));//用字符作为参数
		System.out.println("精确计算结果为;"+ money1.subtract(price1));
	}
}

运行结果为:

Non-terminating decimal expansion; no exact representable decimal result.:通过BigDecimal的divide方法进行除法当不整除,出现无限循环小数时抛出的异常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值