Java中的BigDecimal

        java.math包中提供了BigDecimal类,用来对超过16位有效位的数进行精确的运算。float和double只能用来做科学计算或工程计算,在商业计算中例如金额若需要精确的计算结果就要用到BigDecimal类。

一般的算术运算

        System.out.println(0.06 + 0.01);
        System.out.println(1.0 - 0.43);
        System.out.println(4.015 * 100);
        System.out.println(303.1 / 1000);

0.06999999999999999
0.5700000000000001
401.49999999999994
0.30310000000000004

出现了丢失精度的情况

 

BigDecimal的几种构造方法

BigDecimal(int)           创建一个具有参数所指定整数值的对象。

BigDecimal(double)    创建一个具有参数所指定双精度值的对象。

BigDecimal(long)        创建一个具有参数所指定长整数值的对象。

BigDecimal(String)     创建一个具有参数所指定以字符串表示的数值的对象。

		BigDecimal b = new BigDecimal(1.23);
		System.out.println("b:" + b);

a:1.229999999999999982236431605997495353221893310546875

参数类型为double的构造方法的结果有不确定性

		BigDecimal b = new BigDecimal("1.23");
		System.out.println("b:" + b);

b:1.23

String类型构造方法是确定的,建议使用

 

使用BigDecimal类来进行计算的时候

             1、用float或者double变量先toString为字符串然后构建BigDecimal对象。

             2、用BigDecimal的加,减,乘,除等相应的方法进行算术运算。

             3、把BigDecimal对象转换成float,double,int类型。

        BigDecimal b1 = new BigDecimal(Double.valueOf(0.06).toString());
        BigDecimal b2 = new BigDecimal(Double.valueOf(0.01).toString());
        System.out.println(b1.add(b2).doubleValue());

0.07

注意

想得到理想的计算结果就使用参数类型为String的构造函数。

只在需要精确的小数计算时使用BigDecimal,在处理庞大,复杂的运算时BigDecimal的性能比double和float差。

BigDecimal都是不可变的(immutable)的, 每一次运算时都会产生一个新的对象,所以在做运算时要保存操作后的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值