关于Bigdecimal⼤⼩⽐较和运算总结
Java在java.math包中提供的API类BigDecimal,⽤来对超过16位有效位的数进⾏精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应⽤中,需要对更⼤或者更⼩的数进⾏运算和处理。float和double只能⽤来做科学计算或者是⼯程计算,在商业计算中要⽤java.math.BigDecimal(以上内容来⾃百度百科)
1、BigDecimal ⽐较⼤⼩
BigDecimal所创建的是对象,我们不能使⽤传统的+、-、*、/等算术运算符直接对对象进⾏数学运算,⽽必须调⽤其相对应的⽅法。⽅法中的参数也必须是Bi gDecimal的对象。
⾸先创建BigDecimal对象
BigDecimal a1 =new BigDecimal(100);
BigDecimal a2 =new BigDecimal("60");
BigDecimal a3 =new BigDecimal("60");
//以下为特殊数字的创建⽅式
BigDecimal c1 = BigDecimal.ZERO;
BigDecimal c2 = BigDecimal.ONE;
BigDecimal c3 = BigDecimal.TEN;
⽐较⼤⼩⽤compareTo()⽅法,⼤于为1,⼩于为-1,等于为0
a1pareTo(a2)==1//返回true
a1pareTo(a2)==-1//返回false
a3pareTo(a2)==0//返回true
2、BigDecimal 加减乘除
加减乘除对应的分别是add(),subtract(),multiply(),divide()
BigDecimal d1 =new BigDecimal(10);
BigDecimal d2 =new BigDecimal(2);
BigDecimal d3 =new BigDecimal(3);
加法
BigDecimal r1 = d1.add(d2);
//返回结果为12
减法
BigDecimal r2 = d1.subtract(d2);
//返回结果为8
乘法
BigDecimal r3 = d1.multiply(d2);
//返回结果为20
除法(重点注意)
BigDecimal r4 = d1.divide(d2);
//返回结果为5
******注意:
在实际的运算中,可能存在除不尽的情况,例如:
10除以3,结果为3.3333333…
BigDecimal r5= d1.divide(d3);
运⾏结果:
所以在实际的计算中,需要对此类结果进⾏处理,给定精度标准和舍⼊策略,如下:
BigDecimal r5= d1.divide(d3,2,BigDecimal.ROUND_HALF_UP);
//保留两位⼩数,返回结果为3.33
以下对舍⼊策略进⾏了总结:
(1)ROUND_CEILING:⽆论后⾯是多少(后⾯是0的话除外),在正常值下,往⼤变:
BigDecimal e1 =new BigDecimal("2.22");
BigDecimal e2 =new BigDecimal("-2.22");
BigDecimal result1 = e1.setScale(1,BigDecimal.ROUND_CEILING);
BigDecimal result2 = e2.setScale(1,BigDecimal.ROUND_CEILING);
//返回结果 result1=2.3 result2=-2.2
(2)ROUND_FLOOR:⽆论后⾯是多少(后⾯是0的话除外),在正常值下,往⼩变:
BigDecimal e1 =new BigDecimal("2.22");
BigDecimal e2 =new BigDecimal("-2.22");
BigDecimal result3 = e1.setScale(1,BigDecimal.ROUND_FLOOR);
BigDecimal result4 = e2.setScale(1,BigDecimal.ROUND_FLOOR);
//返回结果 result3=2.2 result4=-2.3
(3)ROUND_UP:⽆论后⾯是多少(后⾯是0的话除外),在绝对值的⾓度,往⼤变:
BigDecimal e1 =new BigDecimal("2.22");
BigDecimal e2 =new BigDecimal("-2.22");
BigDecimal result5 = e1.setScale(1,BigDecimal.ROUND_UP);
BigDecimal result6 = e2.setScale(1,BigDecimal.ROUND_UP);
//返回结果 result5=2.3 result6=-2.3
(4)ROUND_DOWN:⽆论后⾯是多少,都直接丢弃:
BigDecimal e1 =new BigDecimal("2.22");
BigDecimal e2 =new BigDecimal("-2.22");
bigdecimal除法保留小数BigDecimal result7 = e1.setScale(1,BigDecimal.ROUND_DOWN);
BigDecimal result8 = e2.setScale(1,BigDecimal.ROUND_DOWN);
//返回结果 result7=2.2 result8=-2.2
(5)ROUND_HALF_UP:0-4舍,5-9⼊,在绝对值的⾓度,舍和⼊:
重新创建对象
BigDecimal t1 =new BigDecimal("2.24");
BigDecimal t2 =new BigDecimal("-2.24");
BigDecimal t3 =new BigDecimal("2.25");
BigDecimal t4 =new BigDecimal("-2.25");
BigDecimal t5 =new BigDecimal("2.26");
BigDecimal t6 =new BigDecimal("-2.26");
BigDecimal s1 = t1.setScale(1,BigDecimal.ROUND_HALF_UP);
BigDecimal s2 = t2.setScale(1,BigDecimal.ROUND_HALF_UP);
BigDecimal s3 = t3.setScale(1,BigDecimal.ROUND_HALF_UP);
BigDecimal s4 = t4.setScale(1,BigDecimal.ROUND_HALF_UP);
//返回结果s1=2.2 s2=-2.2 s3=2.3 s4=-2.3
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论