我是靠谱客的博主 任性钢笔,最近开发中收集的这篇文章主要介绍Java大数字运算(BigInteger类和BigDecimal类),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java中的超大数BIgInteger和BigDecimal

在我们处理大位数运算的时候,我们经常用的int和long类型的数已经不能够满足我们的运算了,那么这个时候就需要用到一个超大数来运算,这个时候我们会用到java.math.BigInteger,当然如果我们要对多位数的小数进行运算那么这个时候就需要用到java.math.BigDecimal ,这两个都是用于高精度的计算,BigInteger针对于整形大数字的处理,BigDecimal 针对大小数的处理类。

在我们做算法的时候经常会碰到超大数的运算,那么这个时候integer显然是已经不够用的了,所以Java提供了BigInteger来处理更大的数字,平常的int存储的数字位数为2的31次方减1,而超大数可以计算的数字位数超过了上千位,所以 处理我们在运算过程中的数据轻轻松松。

使用超大数

因为超大数是Java的一个类,所以我们需要引入这个类型的包名。一般情况下,我们在使用的时候可以自动导入包名,当然你也可以自己导入包名。


import java.math.BigInteger;

导入了包我么就可以拿来使用了,
我们在使用的时候就可以声明一下,创建对象。
方式一:直接声明 并且赋值

BigInteger a = new BigInteger("123456789") ;	// 声明BigInteger对象但是参数是字符串
BigInteger b =BigInteger.valueOf(123456789) ;	// 声明BigInteger对象参数是int和log

方式二:直接声明,读入数据

Scanner cin = new Scanner(System.in); //相当于C++中的cin,只不过这个cin需要自己创建
        BigInteger a;
        a = cin.nextBigInteger();   //读入一个BigInteger;

BigInteger 类使用方法

因为BigInteger 是一个类,Java本身封装了许多的常用方法,比如,四则运算还有求绝对值、相反数、最大公约数以及判断是否为质数等。
下表是其本身就具有的一些方法,大家在使用的时候可以参考这些方法如何使用。

方法名称使用说明
add(BigInteger val)做加法运算
subtract(BigInteger val)做减法运算
multiply(BigInteger val)做乘法运算
divide(BigInteger val)做除法运算
remainder(BigInteger val)做取余数运算
divideAndRemainder(BigInteger val)做除法运算,返回数组的第一个值为商,第二个值为余数
pow(int exponent)做参数的 exponent 次方运算
negate()取相反数
shiftLeft(int n)将数字左移 n 位,如果 n 为负数,则做右移操作
shiftRight(int n)将数字右移 n 位,如果 n 为负数,则做左移操作
and(BigInteger val)做与运算
or(BigInteger val)做或运算
compareTo(BigInteger val)做数字的比较运算
equals(Object obj)当参数 obj 是 Biglnteger 类型的数字并且数值相等时返回 true, 其他返回 false
min(BigInteger val)返回较小的数值
max(BigInteger val)返回较大的数值

代码示例:

public class BigIntegerDemo1 {
	public static void main(String[] args) {		
BigInteger a = new BigInteger("123456789") ;	// 声明BigInteger对象但是参数是字符串
BigInteger b =BigInteger.valueOf(987654321) ;	// 声明BigInteger对象参数是int和log
//四则运算
//加法操作
System.out.println("加法操作:" + a.add(b)) ;	
//减法操作
System.out.println("减法操作:" + a.subtract(b)) ;
//乘法操作
System.out.println("乘法操作:" + a.multiply(b)) ;
//除法操作
System.out.println("除法操作:" + a.divide(b)) ;

//比较大小
System.out.println("结果:" + a.equsals(b)) ;//如果a、b相等返回true否则返回false
System.out.println("结果:" + a.compareTo(b));  //a小于b返回-1,等于返回0,大于返回1

//常用计算方法
//取余
System.out.println("取余:" + a.mod(b)) ;
//求最大公因数
System.out.println("最大公因数:" + a.gcd(b)) ;
//求最大值
System.out.println("最大值:" + a.max(b)) ;
//求最小值
System.out.println("最小值:" + a.min(b)) ;

//求大整数的位数
//先转换成字符串再求字符串的长度
System.out.println("长度:" + a.toString().length()) ;
}
}

以下诸如此类,大家可以类比着使用。

BigDecimal 类使用方法

使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用。
对于不需要任何准确计算精度的程序可以直接使用float或double完成,但是如果需要精确计算结果,则必须使用BigDecimal类。

BigDecimal 常用的构造方法如下

  • BigDecimal(int val):创建一个具有参数所指定整数值的对象
  • BigDecimal(double):创建一个具有参数所指定双精度值的对象
  • BigDecimal(long):创建一个具有参数所指定长整数值的对象
  • BigDecimal(String):创建一个具有参数所指定以字符串表示的数值的对象

BigDecimal 类使用方法和BigInteger类似,不过多赘述。

BigDecimal 类适用Big Integer的加减乘除等运算但BigDecimal 也有自己的处理小数的方式

下表是BigDecimal 类的处理方式

模式名称说明
BigDecimal.ROUND_UP商的最后一位如果大于 0,则向前进位,正负数都如此
BigDecimal.ROUND_DOWN商的最后一位无论是什么数字都省略
BigDecimal.ROUND_CEILING商如果是正数,按照 ROUND_UP 模式处理;如果是负数,按照 ROUND_DOWN 模式处理
BigDecimal.ROUND_FLOOR与 ROUND_CELING 模式相反,商如果是正数,按照 ROUND_DOWN 模式处理; 如果是负数,按照 ROUND_UP 模式处理
BigDecimal.ROUND_HALF_ DOWN对商进行五舍六入操作。如果商最后一位小于等于 5,则做舍弃操作,否则对最后 一位进行进位操作
BigDecimal.ROUND_HALF_UP对商进行四舍五入操作。如果商最后一位小于 5,则做舍弃操作,否则对最后一位 进行进位操作
BigDecimal.ROUND_HALF_EVEN如果商的倒数第二位是奇数,则按照 ROUND_HALF_UP 处理;如果是偶数,则按 照 ROUND_HALF_DOWN 处理

代码示例:

import java.math.BigDecimal;
public class BigD{
    public static void main(String[] args) {
        // 保存用户输入的数字
        double num = 1211.31354645;
        // 使用输入的数字创建BigDecimal对象
        BigDecimal bd = new BigDecimal(num);
        // 计算大数字加上56.789的结果
        System.out.println("加法操作结果:" + bd.add(new BigDecimal(56.789)));
        // 计算大数字减去-56.456789的结果
        System.out.println("减法操作结果:" + bd.subtract(new BigDecimal(-56.456789)));
        // 计算大数字乘以5.5的结果
        System.out.println("乘法操作结果:" + bd.multiply(new BigDecimal(5.5)));
        // 计算大数字除以3.14的结果,并保留小数后2位
        System.out.println("除法操作结果(保留 2 位小数):" + bd.divide(new BigDecimal(3.14), 2, BigDecimal.ROUND_CEILING));
        // 计算大数字除以3.14的结果,并保留小数后5位
        System.out.println("除法操作结果(保留 5 位小数):" + bd.divide(new BigDecimal(3.14), 5, BigDecimal.ROUND_CEILING));
    }
}

以上详情内容参考Java大数字运算
大数类运算

最后

以上就是任性钢笔为你收集整理的Java大数字运算(BigInteger类和BigDecimal类)的全部内容,希望文章能够帮你解决Java大数字运算(BigInteger类和BigDecimal类)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部