BigInteger 与 BigDecimal的区别

目录

一、BigInteger

二、BigDecimal


一般来说,BigInteger用的不是很多,BigDecimal用的稍微多一点,就比如说JDBC中,如果一个字段的数据库类型是Number, 那么,getObject().getClass()的结果是java.math.BigDecimal。

一、BigInteger

BigInteger相比Integer的确可以用big来形容。它是用于科学计算,Integer只能容纳一个int,所以,最大值也就是2的31次访减去1,十进制为2147483647。但是,如果需要计算更大的数,31位显然是不够用的,那么,此时BigInteger就能满足我们的需求了。

BigInteger能够容纳的位数那可就大了,我简单试了一下,上千位没有任何问题。除了容量大之外,BigInteger还封装了一些常见的操作,比如+-*/的基本操作,还有绝对值,相反数,最大公约数,是否是质数等等的运算。

二、BigDecimal

BigDecimal的实现利用到了BigInteger, 所不同的是,BigDecimal加入了小数位的概念。比如,

BigDecimal d = new BigDecimal(new BigInteger(ib),5);

5表示的是5个小数位。

BigDecimal可以用来做超大的浮点数的运算,比如+-*/的运算,其中除法运算是最复杂的。因为,在商的位数还有除不断的情况下,末位小数点的处理都是需要考虑的。   

new BigDecimal(-7.5).divide(new BigDecimal(1),0,BigDecimal.ROUND_UP); 

上面的这个运算中divide的第二个参数表示商的小数点位数,最后一个参数指的是近似处理的模式。

一共有一下几个模式:  

BigDecimal.ROUND_UP:最后一位如果大于0,则向前进一位,正负数都如此。   

BigDecimal.ROUND_DOWN:最后一位不管是什么都会被舍弃。   

BigDecimal.ROUND_CEILING:如果是正数,按ROUND_UP处理;如果是负数,按照ROUND_DOWN处理。例如,7.1->8;-7.1->-7。所以,这种近似的结果都会>=实际值。   

BigDecimal.ROUND_FLOOR:跟BigDecimal_ROUND_CEILING相反。例如,7.1->7;-7.1->-8。这种处理的结果<=实际值。   

BigDecimal.ROUND_HALF_DOWN:如果最后一位<=5则舍弃,如果>5, 向前进一位。如,7.5->7;7.6->8;-7.5->-7 。  

BigDecimal.ROUND_HALF_UP:如果最后一位<5则舍弃,如果>=5, 向前进一位。反之舍弃。如,7.5->8;7.4->7;-7.5->-8 。  

BigDecimal.ROUND_HALF_EVEN:如果倒数第二位是奇数,按照BigDecimal.ROUND_HALF_UP处理;如果是偶数,按照BigDecimal.ROUND_HALF_DOWN来处理。如,7.5->8;8.5->8;7.4->7;-7.5->-8。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值