BigInteger、BigDecimal大数据类

一、BigInteger大整型类

基本数据类型在表示整型时最大值为2^63-1,即long类型所表示的上限;但想要表示更大的数时long类型肯定不行,所以就要使用大整型类BigInteger;但其不能像基本数据类型一样直接使用“+、-、*、/”符号进行运算操作,需要通过自身的方法操作;

常用方法:

构造器:BigInteger bi=new BigInteger(String value);

BigInteger add(BigInteger val) 返回两个大整数的和
BigInteger subtract(BigInteger val)返回两个大整数相减的结果
BigInteger multiply(BigInteger val) 返回两个大整数的积
BigInteger divide(BigInteger val)  返回两个大整数的商
BigInteger pow(int exponent) 返回当前大整数的exponent次方
BigInteger remainder(BigInteger val) 返回当前大整数除以val的余数

BigInteger negate() 返回当前大整数的相反数
BigInteger abs()  返回大整数的绝对值
BigInteger gcd(BigInteger val)  返回大整数的最大公约数
BigInteger max(BigInteger val) 返回两个大整数的最大者
BigInteger min(BigInteger val) 返回两个大整数的最小者
BigInteger mod(BigInteger val) 用当前大整数对val求模

int intValue() 返回大整数的整型值
long longValue() 返回大整数的long型值
double doubleValue()   返回大整数的double类型的值
float floatValue()   返回大整数的float类型的值
byte[] toByteArray(BigInteger val)将大整数转换成二进制反码保存在byte数组中
String toString(int redix) 将当前大整数转换成redix进制的字符串形式

BigInteger and(BigInteger val)  返回两个大整数的按位与的结果
BigInteger andNot(BigInteger val) 返回两个大整数与非的结果
BigInteger not() 返回当前大整数的非
BigInteger or(BigInteger val) 返回两个大整数的按位或
BigInteger xor(BigInteger val) 返回两个大整数的异或
BigInteger leftShift(int n) 将当前大整数左移n位后返回
BigInteger rightShift(int n) 将当前大整数右移n位后返回

二、BigDecimal大浮点型

同样浮点型数据在精度上太高,即小数位太多,基本数据类型double也不能表示;需要使用BigDecimal类;

常用方法:

构造器:BigDecimalbi=new BigDecimal(String value);

BigDecimal add(BigDecimal val) 返回两个大整数的和
BigDecimal subtract(BigDecimal val)返回两个大整数相减的结果
BigDecimal multiply(BigDecimal val) 返回两个大整数的积
BigDecimal divide(BigDecimal val)  返回两个大整数的商

方法与BigInteger差不多,这里对除法BigDecimal divide(BigDecimal val) 进行说明:
如果进行除法运算的时候,结果不能整除,有余数,这个时候会报java.lang.ArithmeticException:
这边我们要避免这个错误产生,在进行除法运算的时候,针对可能出现的小数产生的计算,必须要多传两个参数;

格式: divide(BigDecimal bi,int num,舍入模式); // num为保留小数的位数

舍入模式

ROUND_HALF_UP 四舍五入(常用)
ROUND_CEILING //向正无穷方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向负无穷方向舍入
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入”
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
ROUND_UP //向远离0的方向舍入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: BigInteger转换为BigDecimal可以通过BigDecimal的构造函数来实现,将BigInteger作为参数传递给BigDecimal构造函数即可。 例如: BigInteger bigInteger = new BigInteger("12345678901234567890"); BigDecimal bigDecimal = new BigDecimal(bigInteger); 这样就将BigInteger型的bigInteger转换为了BigDecimal型的bigDecimal。 ### 回答2: BigIntegerBigDecimal都是Java中处理大数的BigInteger表示不可变的任意精度整数,而BigDecimal表示不可变的任意精度十进制数。 要将BigInteger转换为BigDecimal,可以使用BigDecimal的构造方法来完成转换。BigDecimal的构造方法接受一个BigInteger型的参数,可以直接将BigInteger转换为相应的BigDecimal对象。 以下是将BigInteger对象转换为BigDecimal对象的示例代码: ```java BigInteger bigInteger = new BigInteger("1234567890"); BigDecimal bigDecimal = new BigDecimal(bigInteger); ``` 上述代码中,首先创建了一个BigInteger对象bigInteger,其值为"1234567890"。然后使用BigDecimal的构造方法将bigInteger转换为相应的BigDecimal对象bigDecimal。 通过以上代码,我们成功将BigInteger对象转换为BigDecimal对象。这样就可以继续使用BigDecimal提供的各种方法进行高精度的数值计算。 需要注意的是,由于BigDecimal表示的是十进制数,而BigInteger表示的是整数,所以在转换时可能会导致精度的损失或受到舍入模式的影响。因此,在进行大数计算时,需要根据具体的需求选择合适的转换方式和精度控制。 ### 回答3: 在Java中,BigIntegerBigDecimal是数字处理中非常常用的两个BigInteger用于处理任意长度的整数,而BigDecimal用于处理任意精度的小数。 要将BigInteger转换为BigDecimal,可以使用BigDecimal的构造函数。BigDecimal有一个可以接受BigInteger值的构造函数,这样可以将BigInteger的值转换为BigDecimal。 以下是一个简单的示例代码,演示如何将BigInteger转换为BigDecimal: ```java import java.math.BigDecimal; import java.math.BigInteger; public class BigIntegerToBigDecimal { public static void main(String[] args) { BigInteger bigInteger = new BigInteger("1234567890"); BigDecimal bigDecimal = new BigDecimal(bigInteger); System.out.println("BigInteger: " + bigInteger); System.out.println("BigDecimal: " + bigDecimal); } } ``` 在上述示例中,我们首先创建了一个BigInteger对象(bigInteger),并将其初始化为1234567890。然后,我们使用BigDecimal的构造函数将bigInteger转换为BigDecimal(bigDecimal)。最后,我们将bigIntegerbigDecimal的值输出到控制台上。 输出结果: BigInteger: 1234567890 BigDecimal: 1234567890 通过这种方式,我们可以将BigInteger转换为BigDecimal,用于处理高精度的小数计算。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值