一、BigDecimal 的加减乘除

  1. BigDecimal bignum1 = new BigDecimal("10");
  2. BigDecimal bignum2 = new BigDecimal("5");
  3. BigDecimal bignum3 = null;
  4.  
  5. //加法
  6. bignum3 = bignum1.add(bignum2);
  7. System.out.println("和 是:" + bignum3);
  8.  
  9. //减法
  10. bignum3 = bignum1.subtract(bignum2);
  11. System.out.println("差 是:" + bignum3);
  12.  
  13. //乘法
  14. bignum3 = bignum1.multiply(bignum2);
  15. System.out.println("积 是:" + bignum3);
  16.  
  17. //除法
  18. bignum3 = bignum1.divide(bignum2);
  19. System.out.println("商 是:" + bignum3);

运行结果为:

二、BigDecimal 的比较大小。

  1. BigDecimal num1 = new BigDecimal("0");
  2. BigDecimal num2 = new BigDecimal("1");
  3. BigDecimal num3 = new BigDecimal("2");
  4.  
  5. BigDecimal num = new BigDecimal("1"); //用做比较的值
  6.  
  7. System.out.println(num1.compareTo(num)); //小于 时,返回 -1
  8. System.out.println(num2.compareTo(num)); //等于 时,返回 0
  9. System.out.println(num3.compareTo(num)); //大于 时,返回 1

这是输出结果:

解释下注释里面了。

补充:

BigInteger 也可以存放比较大的数, 和 BigDecimal 的区别是 :BigInteger 存放的是大的整数,而BigDecimal 存放大的小数

继续补充一下,用BigDecimal 写个for循环。

  1. for (BigDecimal i = new BigDecimal("0"); i.compareTo(new BigDecimal("10")) != 1; i = i.add(new BigDecimal("1"))) {
  2. System.out.print(i + "\t");
  3. }

控制台打印的是从0 到 10 。

三、Java中的BigDecimal使用注意事项

1.BigDecial是immutable的,就像String一样,它的所有操作都会生成一个新的对象,所以

  1. amount.add( thisAmount );

是错误的;而应该是:

  1. amount = amount.add( thisAmount );

2. 不要用equals方法来比较BigDecimal对象,因为它的equals方法会比较scale,如果scale不一样,它会返回false;

例如:

  1. BigDecimal a = new BigDecimal("2.00");
  2. BigDecimal b = new BigDecimal("2.0");
  3. print(a.equals(b)); // false

所以你应该使用compareTo()和signum()方法

  1. a.compareTo(b); // returns (-1 if a < b), (0 if a == b), (1 if a > b)
  2. a.signum(); // returns (-1 if a < 0), (0 if a == 0), (1 if a > 0)

3. 使用BigDecimal的字符串构造函数,不要使用double参数的构造函数,否则的话会出现你不想要的结果。

例如下面的代码分别使用double和String的构造函数,然后使用HALF_EVEN的round方法,但是输出结果不一样:

  1. System.out.println("==================");
  2. for(int i = 0; i < 10; i ++) {
  3. StringBuffer sb = new StringBuffer();
  4. sb.append("0.");
  5. sb.append(i);
  6. sb.append("5");
  7. BigDecimal bdx = new BigDecimal(sb.toString());
  8. System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN));
  9. }
  10.  
  11. System.out.println("==================");
  12. for(int i = 0; i < 10; i ++) {
  13. StringBuffer sb = new StringBuffer();
  14. sb.append("0.");
  15. sb.append(i);
  16. sb.append("5");
  17. BigDecimal bdx = new BigDecimal(Double.valueOf(sb.toString()));
  18. System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN));
  19. }

输出是:

  1. ==================
  2. 0.05 0.0
  3. 0.15 0.2
  4. 0.25 0.2
  5. 0.35 0.4
  6. 0.45 0.4
  7. 0.55 0.6
  8. 0.65 0.6
  9. 0.75 0.8
  10. 0.85 0.8
  11. 0.95 1.0
  12. ==================
  13. 0.05 0.1
  14. 0.15 0.1
  15. 0.25 0.2
  16. 0.35 0.3
  17. 0.45 0.5
  18. 0.55 0.6
  19. 0.65 0.7
  20. 0.75 0.8
  21. 0.85 0.8
  22. 0.95 0.9

JAVA BigDecimal 用法的更多相关文章

  1. BigDecimal用法详解(转)

    BigDecimal用法详解    http://www.cnblogs.com/linjiqin/p/3413894.html 一.简介Java在java.math包中提供的API类BigDecim ...

  2. BigDecimal用法总结

    BigDecimal用法总结 BigDecimal常用于金额的计算,下面总结下这次项目中BigDecimal的用法. 1.加减乘除 2.设置精度 3.取反 加减乘除分别调用函数 [java] view ...

  3. Java BigDecimal类的使用和注意事项

    1.对于金额相关运算,若是精度较高,基本上用BigDecimal进行运算,精度要求低的话用Long.Double即可 2.web后台接受金额用String接受,展示到前端一般也转成 String 3. ...

  4. BigDecimal 用法详解

    BigDecimal简介 BigDecimal用法: BigDecimal的构造方法 BigDecimal常用方法描述 BigDecimal比较 BigDecimal总结 BigDecimal简介 J ...

  5. 【转】java list用法示例详解

    转自:http://www.jb51.net/article/45660.htm java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对java list用法做了详解. Lis ...

  6. Java List 用法代码分析 非常详细

    Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3 ...

  7. Java split用法

    Java split用法 java.lang.string.split split 方法  将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separat ...

  8. Java Enum用法详解

    Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举 ...

  9. java bigDecimal and double

    Java BigDecimal和double   BigDecimal是Java中用来表示任意精确浮点数运算的类,在BigDecimal中,使用unscaledValue × 10-scale来表示一 ...

随机推荐

  1. kafka的安装以及基本用法

    kafka的安装 kafka依赖于ZooKeeper,所以在运行kafka之前需要先部署ZooKeeper集群,ZooKeeper集群部署方式分为两种,一种是单独部署(推荐),另外一种是使用kafka ...

  2. NOIP2018游记

    day1 不想吐槽题目了... 40min写完,然后对拍+玩小恐龙. 每个人都阿克了. 预计得分:100+100+100 day2 体验极差 t1本来想写 \(O(n)\) 做法,写到一半发现可以 \ ...

  3. 算法-动态规划 Dynamic Programming--从菜鸟到老鸟

    算法-动态规划 Dynamic Programming--从菜鸟到老鸟      版权声明:本文为博主原创文章,转载请标明出处. https://blog.csdn.net/u013309870/ar ...

  4. 怎么添加在安装好的nvidia-docker上面根据Dockerfile构建自己所需要的运行环境

    在已经创建好nvidia-docker环境之后,对于新手小白来说,又有一个问题了,就是如何根据Dockerfile来构建试验所需要的docker环境 主要是以下几个步骤 首先创建一个mydocker文 ...

  5. 转载:在做datatable时候查询数据和条数只用一次sql就可以解决需求

    前言:最近用datatable处理数据比较多,所以在使用时候想提升性能 select * from t_hr_leave SELECT FOUND_ROWS() //返回查询记录的总数 select ...

  6. Jmeter工具进行一个完整的接口测试

    Jmeter工具进行一个完整的接口测试 1.创建一个线程组 通俗的讲一个线程组,,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户.   2.输入线程组名字 3.添加一个cookie ...

  7. Mysql 根据一个表数据更新另外一个表

    方法一: update 更新表 set 字段 = (select 参考数据 from 参考表 where  参考表.id = 更新表.id); update table_2 m set m.colum ...

  8. k-means cluster images

    说明 慕课网上例子,使用k-means算法分类图片, 此处调试运行通过, 并添加包管理内容, 使得其他同学容易运行. 例子地址: https://github.com/fanqingsong/clus ...

  9. 查找修补文件差异diff、patch

    diff patch -p1 diff -Naur directory1 directory2

  10. linux学习------磁盘性能测试

    测试服务器  1核1G配置 下载后放在你想测试的目录下,执行preparefile.sh准备测试文件,完成后执行runTest.sh执行测试,等待测试结果完成. {sysbench_bin}> ...