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类)相关推荐

  1. 4、大数字运算(BigInteger类和BigDecimal类)

    在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中 BigInteger 类是针对 ...

  2. Java快速入门到精通—大数字运算(BigDecimal 类)

    在Java中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中BigInteger 类是针对整型大 ...

  3. Java——BigInteger类和BigDecimal类

    Java--BigInteger类和BigDecimal类 摘要:本文主要学习了用于大数字运算的BigInteger类和BigDecimal类. 部分内容来自以下博客: https://www.cnb ...

  4. JAVA基础再回首(十三)——BigInteger类、BigDecimal类、Date类、DateFormat类、Calendar类

    JAVA基础再回首(十三)--BigInteger类.BigDecimal类.Date类.DateFormat类.Calendar类 版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://b ...

  5. NumberFormat类、BigInteger类和BigDecimal类-JAVA

    JAVA数学计算函数的总结 提示:以下是本篇文章正文内容,下面案例可供参考 1.NumberFormat类: (public abstract class NumberFormat extends F ...

  6. 15.Java-正则表达式、Pattern和Matcher类、Math类、Random类、System类、BigDecimal类、BigInteger类

    15.Java-正则表达式.Pattern和Matcher类.Math类.Random类.System类.BigDecimal类.BigInteger类 一.正则表达式的概述和简单使用 A:正则表达式 ...

  7. Java面试知识点:Object类、Math类、BigDecimal类、自动装箱、拆箱

    问题:Java面试知识点:Object类.BigDecimal类.自动装箱.拆箱 答案: 1.Object类: 代码如下: package com.xy;/*** @ProjectName: day0 ...

  8. JAVA猜数字小游戏(随机数Random类)

    快乐JAVA,通过不断的摸索,从C到PHP再到Python,Python再到Java-终于被我找到了属于我的本命编程语言(泪目).学起来很开心,很快乐,这种感觉就像和初恋谈恋爱一样,编程不再是写代码, ...

  9. 正则表达式、常用类(Pattern类、Matcher类、Math类、System类、Random类、BigDecimal类、Date类、SimpleDateFormat类、Calendar类)

    JAVA学习第十六天-正则表达式.常用类(Pattern类.Matcher类.Math类.System类.Random类.BigDecimal类.Date类.SimpleDateFormat类.Cal ...

最新文章

  1. 跟风 Python 的人,后来都怎样了?
  2. 整理照片,python批量修改名称
  3. consume_skb 和 kfree_skb的区别
  4. 扎克伯格预言即将成真:计算机可解读图片内容
  5. Java?Python?Let us GO!
  6. securecrt配置linux账号密码,配置SecureCRT密钥连接Linux
  7. 《需求分析与系统设计》第三篇
  8. 【Flink】Flink开发中遇到的问题及解法
  9. jmeter 非GUI模式下测试报错An error occurred: Unknown arg:
  10. 云原生游戏《云联物语》揭开神秘面纱 云鹭科技温向东带你深度了解云原生游戏领域...
  11. 详解机器学习之the Learning Problem
  12. 内联函数的常识性问题
  13. 微分方程matlab绘图,Matlab学习——求解微分方程(组)
  14. Android项目迁移到Androidx经验总结
  15. VB.net开发微信、支付宝扫码支付源码
  16. node.js使用ass生成视频字幕(上)
  17. gazebo仿真时在加入差分运动插件后没有cmd_vel话题
  18. ANSI、C99、C11 标准区别详解
  19. BootLoader是什么 转载至百度百科
  20. Mac 开发 打开系统偏好设置

热门文章

  1. Undefined symbols for architecture i386和”_OBJC_CLASS_$_xx文件名, referenced from:
  2. 易信公众平台开发(ASP.NET WebForm) Using Senparc.Weixin.MP SDK
  3. Ubuntu下载Github代码
  4. [人才招聘-日企独资上市企业,岗位真实有效]
  5. linux内存硬件检测工具,13种在 Linux 系统上检测 CPU 信息的工具
  6. matlab htk tools,基于HTK调用MATLAB的语音识别的研究
  7. 用四个元件,轻松做一个升压电路
  8. Unity/c#鼠标右键控制相机围绕物体旋转/滚轮控制远近
  9. java第三方开源jodd
  10. 查询有2门及以上不及格科目的学生姓名及其平均成绩