JAVA BigDecimal 用法
一、BigDecimal 的加减乘除
- BigDecimal bignum1 = new BigDecimal("10");
- BigDecimal bignum2 = new BigDecimal("5");
- BigDecimal bignum3 = null;
- //加法
- bignum3 = bignum1.add(bignum2);
- System.out.println("和 是:" + bignum3);
- //减法
- bignum3 = bignum1.subtract(bignum2);
- System.out.println("差 是:" + bignum3);
- //乘法
- bignum3 = bignum1.multiply(bignum2);
- System.out.println("积 是:" + bignum3);
- //除法
- bignum3 = bignum1.divide(bignum2);
- System.out.println("商 是:" + bignum3);
运行结果为:
二、BigDecimal 的比较大小。
- BigDecimal num1 = new BigDecimal("0");
- BigDecimal num2 = new BigDecimal("1");
- BigDecimal num3 = new BigDecimal("2");
- BigDecimal num = new BigDecimal("1"); //用做比较的值
- System.out.println(num1.compareTo(num)); //小于 时,返回 -1
- System.out.println(num2.compareTo(num)); //等于 时,返回 0
- System.out.println(num3.compareTo(num)); //大于 时,返回 1
这是输出结果:
解释下注释里面了。
补充:
BigInteger 也可以存放比较大的数, 和 BigDecimal 的区别是 :BigInteger 存放的是大的整数,而BigDecimal 存放大的小数
继续补充一下,用BigDecimal 写个for循环。
- for (BigDecimal i = new BigDecimal("0"); i.compareTo(new BigDecimal("10")) != 1; i = i.add(new BigDecimal("1"))) {
- System.out.print(i + "\t");
- }
控制台打印的是从0 到 10 。
三、Java中的BigDecimal使用注意事项
1.BigDecial是immutable的,就像String一样,它的所有操作都会生成一个新的对象,所以
- amount.add( thisAmount );
是错误的;而应该是:
- amount = amount.add( thisAmount );
2. 不要用equals方法来比较BigDecimal对象,因为它的equals方法会比较scale,如果scale不一样,它会返回false;
例如:
- BigDecimal a = new BigDecimal("2.00");
- BigDecimal b = new BigDecimal("2.0");
- print(a.equals(b)); // false
所以你应该使用compareTo()和signum()方法
- a.compareTo(b); // returns (-1 if a < b), (0 if a == b), (1 if a > b)
- a.signum(); // returns (-1 if a < 0), (0 if a == 0), (1 if a > 0)
3. 使用BigDecimal的字符串构造函数,不要使用double参数的构造函数,否则的话会出现你不想要的结果。
例如下面的代码分别使用double和String的构造函数,然后使用HALF_EVEN的round方法,但是输出结果不一样:
- System.out.println("==================");
- for(int i = 0; i < 10; i ++) {
- StringBuffer sb = new StringBuffer();
- sb.append("0.");
- sb.append(i);
- sb.append("5");
- BigDecimal bdx = new BigDecimal(sb.toString());
- System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN));
- }
- System.out.println("==================");
- for(int i = 0; i < 10; i ++) {
- StringBuffer sb = new StringBuffer();
- sb.append("0.");
- sb.append(i);
- sb.append("5");
- BigDecimal bdx = new BigDecimal(Double.valueOf(sb.toString()));
- System.out.println(sb + " " +bdx.setScale(1, RoundingMode.HALF_EVEN));
- }
输出是:
- ==================
- 0.05 0.0
- 0.15 0.2
- 0.25 0.2
- 0.35 0.4
- 0.45 0.4
- 0.55 0.6
- 0.65 0.6
- 0.75 0.8
- 0.85 0.8
- 0.95 1.0
- ==================
- 0.05 0.1
- 0.15 0.1
- 0.25 0.2
- 0.35 0.3
- 0.45 0.5
- 0.55 0.6
- 0.65 0.7
- 0.75 0.8
- 0.85 0.8
- 0.95 0.9
JAVA BigDecimal 用法的更多相关文章
- BigDecimal用法详解(转)
BigDecimal用法详解 http://www.cnblogs.com/linjiqin/p/3413894.html 一.简介Java在java.math包中提供的API类BigDecim ...
- BigDecimal用法总结
BigDecimal用法总结 BigDecimal常用于金额的计算,下面总结下这次项目中BigDecimal的用法. 1.加减乘除 2.设置精度 3.取反 加减乘除分别调用函数 [java] view ...
- Java BigDecimal类的使用和注意事项
1.对于金额相关运算,若是精度较高,基本上用BigDecimal进行运算,精度要求低的话用Long.Double即可 2.web后台接受金额用String接受,展示到前端一般也转成 String 3. ...
- BigDecimal 用法详解
BigDecimal简介 BigDecimal用法: BigDecimal的构造方法 BigDecimal常用方法描述 BigDecimal比较 BigDecimal总结 BigDecimal简介 J ...
- 【转】java list用法示例详解
转自:http://www.jb51.net/article/45660.htm java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对java list用法做了详解. Lis ...
- Java List 用法代码分析 非常详细
Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺序不会乱),元素可以重复(角标1上有个3 ...
- Java split用法
Java split用法 java.lang.string.split split 方法 将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separat ...
- Java Enum用法详解
Java Enum用法详解 用法一:常量 在JDK1.5 之前,我们定义常量都是: public static fianl.... .现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举 ...
- java bigDecimal and double
Java BigDecimal和double BigDecimal是Java中用来表示任意精确浮点数运算的类,在BigDecimal中,使用unscaledValue × 10-scale来表示一 ...
随机推荐
- Flask 构建微电影视频网站(六)
会员模块实现 会员注册 class RegistForm(FlaskForm): name = StringField( label="昵称", validators=[ Data ...
- LUYA-CDM
下载链接:https://pan.baidu.com/s/11Lq3IWcAcAs9gYbq4mYm1Q 密码:n1kz
- Mac anaconda安装 “conda command not found” 解决方法
官网下载包直接安装的时候可能会产生这种问题,这主要还是环境变量配置的问题 一般我们添加环境变量的方法是编辑.bash_profile或.bashrc,在文件里插入下面这段代码 export PATH= ...
- 2059 - Authentication plugin 'caching_sha2_password' cannot be loaded: dlopen(../Frameworks/caching_sha2_password.so, 2): image not found
mac本地安装mysql后,navicat连接报错: - Authentication plugin ): image not found 解决方法 在控制台登陆后重新改下密码即可 ALTER USE ...
- [模板]fhqTreap
用途 平衡树(可实现区间翻转) 原理 和treap一样,中序遍历表示权值的顺序,并且每个点有一个随机的附加值,形成一个堆来保证复杂度 但是不旋转,所有操作通过split和merge实现 分为两种spl ...
- BZOJ2127Happiness
题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...
- pthread 线程立即取消的两种方法
1.相关函数介绍 a. int pthread_cancel(pthread_t thread) 1发送终止信号给thread线程,如果成功则返回0,否则为非0值.发送成功并不意味着thread会终止 ...
- netcore中的缓存介绍
Cache(缓存)是优化web应用的常用方法,缓存存放在服务端的内存中,被所有用户共享.由于Cache存放在服务器的内存中,所以用户获取缓存资源的速度远比从服务器硬盘中获取快,但是从资源占有的角度考虑 ...
- RabbitMQ installation
以windows环境测试 Erlang http://www.erlang.org/downloads 下载并安装 运行时软件 Erlang OTP 21.3 Windows 64-bit Binar ...
- VS注释快捷键
注释: 先CTRL+K,然后CTRL+C 取消注释: 先CTRL+K,然后CTRL+U 代码自动对齐:1, ctrl+a 2, ctrl+k 3, ctrl+f