浅析java中的BigDecimal
来源:互联网 发布:俄罗斯战斗民族知乎 编辑:程序博客网 时间:2024/06/01 09:14
在精确小数运算中,经常会用到java.math.BigDecimal这个类,那么BigDecimal到底能参与多大范围的数字间的运算呢,查看BigDecimal的注释:
意思就是一个Bigdecimal是任意精度的 整数非标度值和32位标度值组成,那么BigDecimal的最大值,以及最大小数位到底可以是多少呢。通过查看源码可以看到
public class BigDecimal extends Number implements Comparable<BigDecimal> { /** * The unscaled value of this BigDecimal */ private final BigInteger intVal; /** * The scale of this BigDecimal. */ private final int scale; ...}
也就是说一个BigDecimal表示的数字实际上是由BigInteger 来表示这个数字的值,int 来表示有多少个小数位,
比如:
intVal = 1000;
scale = 1;
@Testpublic void testVal(){ BigDecimal bigDecimal2 = new BigDecimal(new BigInteger("1000"), 1); System.out.println(bigDecimal2);}
那么这个数字的值实际上是100.0;
所以Bigdecimal能表示的最大整数应该是Biginteger的最大值
最多能有Integer.MAX_VALUE个小数位
另外在利用Bigdecimal做除法时,如果遇到除不尽的情况下,如果不指定精度会抛出异常。
@Rulepublic ExpectedException thrown= ExpectedException.none();@Testpublic void testDivide(){ BigDecimal ten = new BigDecimal("10"); BigDecimal three = new BigDecimal("3"); thrown.expect(ArithmeticException.class); thrown.expectMessage("Non-terminating decimal expansion; " + "no exact representable decimal result."); System.out.println(ten.divide(three));}@Testpublic void testDivide2(){ BigDecimal ten = new BigDecimal("10"); BigDecimal three = new BigDecimal("3"); System.out.println(ten.divide(three,10,RoundingMode.HALF_UP)); //保留10位小数进行四舍五入}
此外在运算上面,Bigdecimal会根据数值大小来决定是否使用long值做计算,如果数值比较大才会使用BigInteger进行计算。
阅读全文
0 0
- 浅析java中的BigDecimal
- Java中的BigDecimal
- java中的类BigDecimal
- Java BigDecimal中的RoundingMode
- Java中的BigDecimal的使用
- Java 中的数值运算-BigDecimal
- Java中的Bigdecimal类型运算
- Java中的Bigdecimal类型运算
- Java中的BigDecimal使用注意事项
- Java中的java.math.BigDecimal的使用
- 浅析java中BigDecimal大数值类的使用
- Java中的BigDecimal类用法介绍
- Java中的BigDecimal类进行精确计算
- 使用BigDecimal处理Java中的小数
- java.math包中的BigInteger和BigDecimal
- Java中的大数据:BigInteger和BigDecimal
- 浅析 Java 中的覆盖
- 浅析Java中的Logger
- opencv大牛博客集锦
- mtk6737如何改差值文件
- eclipse编写的老项目怎么导入到Android studio中运行
- Android:30分钟弄明白Touch事件分发机制
- IOS开发-设置隐藏系统默认返回按钮(默认顶部)
- 浅析java中的BigDecimal
- [JAVA] Hibernate 大数据类型映射
- ESL 7 模型的评估与选择
- 剑指offer——52.正则表达式匹配
- TMS320F2812的CMD文件配置详解
- Git版本回退
- 去掉小数点后多余的Zero
- VIM中正则的非贪婪匹配
- 剑指offer——53.表示数值的字符串