BigDecimal 进行精确的数学运算 ,计算超大的数字(当long都不够用时)

 1 public class Demo01 {
 2 
 3     public static void main(String[] args) {
 4         
 5         BigDecimal bg1=new BigDecimal(1.23);
 6         //建议使用这种,因为参数为double类型时,本身就不能进行精确运算,转换后问题还在
 7         BigDecimal bg2=new BigDecimal("3.54");
 8         BigDecimal bg3=new BigDecimal("1.23");
 9         
10         //加法
11         System.out.println("不精确的---->"+bg2.add(bg1));
12         System.out.println("精确的=====>"+bg2.add(bg3));
13         //减法
14         System.out.println(bg2.subtract(bg3));
15         //乘法
16         System.out.println(bg2.multiply(bg3));
17         //除法,当不能整除时一定要有舍入模式  //第一个参数是操作数,第二个是舍入位数,第三个是舍入模式
18         System.out.println(bg2.divide(bg3,4,BigDecimal.ROUND_HALF_UP));
19         
20         //超大数值运算
21         BigInteger bg4=new BigInteger("8888888888888888888888888888888888");
22         BigInteger bg5=new BigInteger("8888888888888888888888888888888888");
23         System.out.println(bg4.add(bg5));
24         System.out.println(bg4.multiply(bg5));
25         
26     }
27 
28 }

控制台输出结果:

不精确的---->4.769999999999999982236431605997495353221893310546875
精确的=====>4.77
2.31
4.3542
2.8780
17777777777777777777777777777777776
79012345679012345679012345679012329876543209876543209876543209876544

原文地址:https://www.cnblogs.com/sunzhiqiang/p/11730772.html