相关文章

  1. 《常用类 (一) ----- Arrays数组工具类》
  2. 《常用类 (二) ----- Math类》
  3. 《常用类 (三) ----- BigDecimal和BigInteger大数类》
  4. 《常用类 (四) ----- Random随机数类》
  5. 《常用类 (五) ----- Date日期类和Calender日历类》
  6. 《常用类 (六) ----- String类与字符串》
  7. 《常用类 (七) ----- 包装类》

文章目录

  • 一、摘要
  • 二、常用的构造方法
  • 三、常用方法
  • 四、测试
  • 五、关于BigDecimal小数精度
一、摘要

java中的基本数据类型能存储的最大的二进制数是 2 ^ 63 - 1,对应的十进制数是9223372036854775807,也就是说只要运算过程中会超过这个数,就会造成数据溢出,从而造成错误.而java.math.*包中提供了大数类,其理论上可以存储无限位的大数,只要内存足够的话。

  1. 大数类又分为整数和浮点数.即BigInteger和BigDecimal
  2. 大数类的对象不能直接进行运算,需要调用类中相应的方法,并且方法的参数必须和调用的类相同,BigInteger不能调用BigDecimal, 不能作为其方法参数, 即整数和浮点数不能混合运算.
二、常用的构造方法

BigInteger

构造方法 说明
BigInteger(byte[] b) 用字节数组实例化
BigInteger(String s) 用字符串实例化

BigDecimal

构造方法 说明
BigDecimal(char[] c) 用字符数组实例化
BigDecimal(String s) 用字符串实例化
三、常用方法
返回值 方法名及形参 功能
大数类型 static valueOf( long/double ) 用long/double类型赋值给大数类型
大数类型 add( 大数类型 )
大数类型 subtract( 大数类型 )
大数类型 multiply( 大数类型 )
大数类型 divide( 大数类型 )
大数类型 pow( int n ) 幂运算
大数类型 mod(大数类型) 取余
大数类型 gcd(大数类型) 求最大公约数
大数类型 max/min(大数类型) 求最值
-1,0,1 compareTo( 大数类型 ) 比较大小
四、测试
    public static void main(String[] args) {BigInteger a, b;BigDecimal c, d;BigInteger m;BigDecimal n;// 用valueOf给大数类型赋值a = BigInteger.valueOf(12345678910L);b = BigInteger.valueOf(10987654321L);c = BigDecimal.valueOf(12345.678910);d = BigDecimal.valueOf(109876.54321);// 加 addinitValue(a, b, c, d);m = a.add(b);n = c.add(d);System.out.println("加法结果:\n" + m + "\n" + n);// 减 subtractinitValue(a, b, c, d);m = a.subtract(b);n = c.subtract(d);System.out.println("减法结果:\n" + m + "\n" + n);// 乘 multiplyinitValue(a, b, c, d);m = a.multiply(b);n = c.multiply(d);System.out.println("乘法结果:\n" + m + "\n" + n);// 除 divideinitValue(a, b, c, d);m = a.divide(b);n = c.divide(d, 100, RoundingMode.HALF_UP);System.out.println("除法结果:\n" + m + "\n" + n);// 幂运算initValue(a, b, c, d);m = a.pow(100);n = c.pow(100);System.out.println("幂运算结果:\n" + m + "\n" + n);// 取余 modinitValue(a, b, c, d);m = a.mod(b);System.out.println("取余结果:\n" + m);// 最大公因数 gcdinitValue(a, b, c, d);m = a.gcd(b);System.out.println("最大公约数结果:\n" + m);// 最值 maxinitValue(a, b, c, d);m = a.max(b);n = c.max(d);System.out.println("求最值结果:\n" + m + "\n" + n);// 比较大小 compareToinitValue(a, b, c, d);int result1 = a.compareTo(b);int result2 = c.compareTo(d);}private static void initValue(BigInteger a, BigInteger b, BigDecimal c, BigDecimal d) {a = BigInteger.valueOf(12345678910L);b = BigInteger.valueOf(10987654321L);c = BigDecimal.valueOf(12345.678910);d = BigDecimal.valueOf(109876.54321);}

输出结果:

加法结果:
23333333231
122222.22212
减法结果:
1358024589
-97530.86430
乘法结果:
135650052221140070110
1356500522.2114007011
除法结果:
1
0.1123595496302108319667076282786890925524958549521882069045481031383094965133277421387490699526530909
幂运算结果:
14174173749143624867199388782976370696584598905623269233794905465646075736639363447485386999471083827856071215306792314850239157595445375554053121819626520989217777709746256424480921947327175482198714220258970951704496456554752431243887669182189882055034074852101536447387155979978224694792011542700957944706132863593588259846889044825464499985801594647890491425519189698057060140974706761606685501525428429105848344710793461513638685209871285158787924000699794775244283827677590792189058992967208305067790184530740009535853295239129970970153362090124167790426513536088580553023216199576498421192897633134220267560149599135706944364789976712679709057162136698835039484941101400189574308641460966764091221067090045342422202344822976773003356908149079355915959748838189606705194837617902681589663790654669167338960468794852887873720676274071749353578286175245427317435492142594903076621828436193110243792222340010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
14174173749143624867199388782976370696584598905623269233794905465646075736639363447485386999471083827856071215306792314850239157595445375554053121819626520989217777709746256424480921947327175482198714220258970951704496456554752431243887669182189882055034074852101536447387155979978224694792011542700957944706132863593588259846889044825464499985801594647890491425519189698057060140974706761606685501525428429105.84834471079346151363868520987128515878792400069979477524428382767759079218905899296720830506779018453074000953585329523912997097015336209012416779042651353608858055302321619957649842119289763313422026756014959913570694436478997671267970905716213669883503948494110140018957430864146096676409122106709004534242220234482297677300335690814907935591595974883818960670519483761790268158966379065466916733896046879485288787372067627407174935357828617524542731743549214259490307662182843619311024379222234001
取余结果:
1358024589
最大公约数结果:
1
求最值结果:
12345678910
109876.54321Process finished with exit code 0
五、关于BigDecimal小数精度
  1. BigDeciaml在进行加减乘除等运算时可以设置运算结果的小数位数和小数舍入模式,下面以除法为栗子。

    BigDeciaml divide(BigDecimal divisor, int scale, RoundingMode roundingMode)

    (1) scale参数:设置小数位数
    (2) roundingMode参数:设置小数舍入模式

  2. java.math.RoundingMode类中的舍入字段

    字段 说明 举例
    CEILING 向正无穷方向舍入 1.55≈1.61.55\approx1.61.55≈1.6, −1.55≈1.5-1.55 \approx1.5−1.55≈1.5
    FLOOR 向负无穷方向舍入 1.55≈1.51.55 \approx 1.51.55≈1.5, −1.55≈−1.6-1.55 \approx-1.6−1.55≈−1.6
    DOWN 向接近0方向舍入 1.55≈1.51.55 \approx 1.51.55≈1.5, −1.55≈−1.5-1.55 \approx -1.5−1.55≈−1.5
    UP 向远离0方向舍入 1.55≈1.61.55 \approx1.61.55≈1.6, −1.55≈−1.6-1.55 \approx-1.6−1.55≈−1.6
    HALF_UP 四舍五入 \
    HALF_DOWN 五舍六入 \
    HALF_EVEN 如果舍入前一位的数字为偶数,则采用五舍六入奇数则采用四舍五入 1.45≈1.41.45\approx1.41.45≈1.4,1.55≈1.61.55\approx1.61.55≈1.6
    UNNECESSARY 运算结果有精确位数,不需要舍入 \
  3. 测试

常用类 (三) ----- BigDecimal和BigInteger大数类相关推荐

  1. 常用工具类 (三) : Hutool 常用工具类整理 (全)

    文章目录 官方文档 一.基础工具类 StrUtil / StringUtils 字符串工具类 DateUtil 日期工具类 NumberUtil 数字工具类 BeanUtil JavaBean工具类 ...

  2. Java 大数类BigInteger与BigDecimal详细介绍(配蓝桥杯例题讲解)

    文章目录 1.基本函数 1.1 java.math.BigInteger.valueOf(long val) 2.运算法则 2.1 基本运算 2.2 compareTo(BigInteger othe ...

  3. 刷题常用之大数类、数学类

    一.前言 数学和大数类都是我们刷题比较常用的类,在笔试的时候两个类都可以用,但是在面试的时候尽量不要用大数类,因为大数类是java语言特有的(虽然有很多语言也有大数,但是不是所有语言都有大数,比如c+ ...

  4. java 向上舍入_介绍Java的大数类(BigDecimal)和八种舍入模式

    1.BigDecimal简介 BigDecimal 由任意精度的整数非标度值 和32 位的整数标度 (scale) 组成.如果为零或正数,则标度是小数点后的位数.如果为负数,则将该数的非标度值乘以 1 ...

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

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

  6. Java大数字运算(BigInteger类和BigDecimal类)

    Java中的超大数BIgInteger和BigDecimal 在我们处理大位数运算的时候,我们经常用的int和long类型的数已经不能够满足我们的运算了,那么这个时候就需要用到一个超大数来运算,这个时 ...

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

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

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

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

  9. Day20.常用类:Date类、LocalTime、Math类、bigDecimal、Arrays、枚举

    目录 日期类(Date) 日期格式化(SimpleDateFormat) 时间戳 (currentTimeMillis方法) 日历类 Calendar JDK8后日期类(LocalTime) Math ...

最新文章

  1. 管道符和作业控制、shell变量、环境变量配置文件
  2. python 生成pdf收据_python如何与以太坊交互并将区块链信息写入SQLite
  3. BZOJ4818 [SDOI2017] 序列计数 【矩阵快速幂】
  4. 单向链表 双向链表 java代码实现
  5. ElasticSearch的Object数据类型
  6. Serverless 实战 —— 阿里云函数计算配合SpringBoot项目
  7. request中的技巧
  8. python列表转化为数字信号_python 经典数字滤波实例 Python 数字信号处理程序实现分享解...
  9. 利用K8S技术栈打造个人私有云(连载之:初章)
  10. SpringBoot学习之文件结构和配置文件
  11. SQL Server 建库,表,约束(一)
  12. 各位有没有遇到过这样的问题?
  13. VirtualBox硬盘扩容
  14. pillow 保存图像路径_python利用pillow包处理图片
  15. python 写入文件并保存_python学习将数据写入文件并保存方法
  16. 微软智能云Azure在华新增数据中心区域正式启用
  17. LQ0187 猜年龄【填空题】
  18. 【檀越剑指大厂--ElasticSearch】ElasticSearch进阶
  19. 数据研究必备:国内40个免费数据源大放送!
  20. 机器学习中的最优化问题

热门文章

  1. Unieap3.5-Grid编辑列中数字与下拉改变
  2. Scalable Web Architectures: Common Patterns and Approaches
  3. Linux操作Oracle(5)——Oracle11g 卸载OPatch安装补丁的方法【rollback已安装的补丁】及报错问题解决
  4. opencv学习笔记02
  5. 时间管理专题_软件篇03
  6. js常用内建对象之:Array
  7. 一键加速去不掉加锁的_十年斑点去不掉,大妈巧用蜂蜜擦脸,皮肤白净还年轻...
  8. (第十一章)数据表的增删改
  9. echart高级使用_Vue:在Vue中使用echarts
  10. textfield获取其中内容_用户认知视角下的产品信息获取体验度量体系研究