设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间08 现在时间08 缓存数据 若岁月静好,那就颐养身心;若时光阴暗,那就多些历练。早安!

若岁月静好,那就颐养身心;若时光阴暗,那就多些历练。早安!

查看: 381|回复: 1

JAVA 中的大数字操作类详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:即来则安
  • 打卡总天数:17
  • 打卡月天数:0
  • 打卡总奖励:253
  • 最近打卡:2024-09-19 08:36:13
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
30
主题
26
精华
0
金钱
355
积分
72
注册时间
2023-8-12
最后登录
2025-3-13

发表于 2024-11-7 14:38:01 | 显示全部楼层 |阅读模式
目录
  • 大整数操作类:BigInteger 概述
    • 主要特点
    • 使用场景
    • 构造器
    •  常用方法
  • 大小数操作类:BigDecimal 
    • 概述
    • 主要特点
    • 使用场景
    • 构造器

字符串表示大数字, "123456789123456789123456789123456789123456789"

(1)java.math.BigInteger 大整数操作类

(2)java.math.BigDecimal 大小数操作类

        这两个类和 Java 中的表示数字的基本数据类型的包装类(Byte、Short、Integer、Long、 Double、Float)都是继承自 Number,即 Number 类的子类。

大整数操作类:BigInteger 概述

  1.    BigInteger
复制代码
 是一个用于表示任意精度整数的类。它可以处理仅在 
  1. int
复制代码
 或 
  1. long
复制代码
 范围内的整数运算以及超出这些范围的整数。

主要特点

(1)精度:不受 

  1. int
复制代码
 和 
  1. long
复制代码
 限制,可以处理非常大的整数。

(2)不支持小数:只能表示整数。

(3)所有操作(加法、减法、乘法、除法等)都通过方法实现,不能直接使用运算符。

使用场景

(1)计算大数的结果(如科学计算、密码学等)。

(2)需要精确的整数计算(如金融、统计分析等)。

(3)需要处理大范围数值的算法(如大数运算、阶乘计算等)。

        大整数操作类:BigInteger 可以操作无限大的整型数据。

构造器

        对于 BigInteger 类有很多个构造器,但是最常用的就是有一个 String 类型参数的构造器:

  1. public BigInteger(String val) {
  2. this(val, 10);
  3. }
复制代码

 常用方法

(1)BigInteger add(BigInteger val)

        加法操作;

(2)BigInteger subtract(BigInteger val)

        减法操作;

(3)BigInteger multiply(BigInteger val)

        乘法操作;

(4)BigInteger divide(BigInteger val)

        除法操作(不保留小数部分);

(5)BigInteger[] divideAndRemainder(BigInteger val)

        除法操作,返回值是一个长度为 2 的数组,数组中的第一个元素表示商,数组中第二个元素表示余 数。

示例:

  1. import java.math.BigInteger;
  2. public class Test {
  3. public static void main(String[] args) {
  4. BigInteger bigInteger1 = new BigInteger("123456789123456789123456789123456789123456789");
  5. BigInteger bigInteger2 = new BigInteger("123456789123456789123456789123456789123456789");
  6. System.out.println(bigInteger1);
  7. System.out.println(bigInteger2);
  8. // 加法
  9. BigInteger plus = bigInteger1.add(bigInteger2);
  10. // 减法
  11. BigInteger subtract = bigInteger1.subtract(bigInteger2);
  12. // 乘法
  13. BigInteger multiply = bigInteger1.multiply(bigInteger2);
  14. // 除法
  15. BigInteger divide = bigInteger1.divide(bigInteger2);
  16. System.out.println(plus);
  17. System.out.println(subtract);
  18. System.out.println(multiply);
  19. System.out.println(divide);
  20. }
  21. }
复制代码

打印结果:

1.png

大小数操作类:BigDecimal 

概述

  1.    BigDecimal
复制代码
 是一个用于表示任意精度的浮点数的类。它具有控制小数位数和舍入策略的功能。

主要特点

(1)精度高,不会受到 

  1. float
复制代码
 和 
  1. double
复制代码
 的限制,适用于需要精确表示小数点数据的场景。

(2)支持控制小数点后的位数及舍入方式。

(3)通过方法实现计算,不能直接使用运算符。

使用场景

(1)金融计算:涉及到货币或者利息计算时,确保不会因为浮点数运算导致的精度损失。

(2)科学计算:需要更高精度的小数计算。

(3)需要高精度结果的任何应用(如价格计算、统计数据处理中)。

构造器

        BigDecimal(String val) 创建一个表示字符串参数 val 的 BigDecimal 类型的大小数对象。

常用方法

(1)BigDecimal add(BigDecimal augend) 加法操作;

(2)BigDecimal subtract(BigDecimal subtrahend) 减法操作;

(3)BigDecimal multiply(BigDecimal multiplicand) 乘法操作;

(4)BigDecimal divide(BigDecimal divisor) 除法操作,如果除不尽,则会报 java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result;

(5)BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) 除法操作,可以设置结果保留的小数的位数以及进位模式,scale 参数表示保留的小数位数, roundingMode 参数表示进位模式。BigDecimal 类中定义多个静态常量表示进位模式, ROUND_HALF_UP 这个静态常量就表示四舍五入。

示例:

  1. import java.math.BigDecimal;
  2. public class Test {
  3. public static void main(String[] args) {
  4. BigDecimal bigDecimal1 = new BigDecimal("123456789123456789123456789123456789123456789.123456789123456789123456789123456789123456789");
  5. BigDecimal bigDecimal2 = new BigDecimal("123456789123456789123456789123456789123456789.123456789123456789123456789123456789123456789");
  6. System.out.println(bigDecimal1);
  7. System.out.println(bigDecimal2);
  8. // 加法
  9. BigDecimal plus = bigDecimal1.add(bigDecimal2);
  10. // 减法
  11. BigDecimal subtract = bigDecimal1.subtract(bigDecimal2);
  12. // 乘法
  13. BigDecimal multiply = bigDecimal1.multiply(bigDecimal2);
  14. // 除法
  15. BigDecimal divide = bigDecimal1.divide(bigDecimal2);
  16. System.out.println(plus);
  17. System.out.println(subtract);
  18. // 0E-45 是一个科学计数法的表示方式,表示的是非常靠近于零的数。此处的E-45是表示小数点位置,虽然数字为零,但由于内部存储的计算精度导致了这样的表示。
  19. // 修改输出格式以普通数字显示
  20. System.out.println(subtract.stripTrailingZeros().toPlainString());
  21. System.out.println(multiply);
  22. System.out.println(divide);
  23. }
  24. }
复制代码

打印结果:

2.png

 定义声明一个方法,可以对 double 类型的小数进行四舍五入的操作

示例:

  1. import java.math.BigDecimal;
  2. public class Test {
  3. public static void main(String[] args) {
  4. double i = 3.1415926;
  5. System.out.println(round(i,2));
  6. }
  7. /**
  8. *
  9. * @param num 传入的 double 类型的数据
  10. * @param scale 保留位数
  11. * @return
  12. */
  13. public static double round(double num,int scale) {
  14. BigDecimal decimal = new BigDecimal(num);
  15. //进行除法操作,除以 1 来控制结果保留多少位小数
  16. BigDecimal result =
  17. decimal.divide(new BigDecimal(1), scale, BigDecimal.ROUND_HALF_UP);
  18. //把 BigDecimal 类型的结果转换为 double 类型返回
  19. return result.doubleValue();
  20. }
  21. }
复制代码

打印结果:

3.png

到此这篇关于JAVA 中的大数字操作类的文章就介绍到这了,更多相关java大数字操作类内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
21
积分
22
注册时间
2022-12-29
最后登录
2022-12-29

发表于 2025-4-2 02:41:33 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表