java 大数处理方案指南

简介: 1.Java大数值处理方案如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算使用静态的valueOf方法可以将普通的数值转换为大数值:


1.Java大数值处理方案


如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算

使用静态的valueOf方法可以将普通的数值转换为大数值:


BigInteger a = BigInteger.valueOf(100);
System.out.println(a);  // 100


2.BigInteger


该类实现了大整数的运算

大整数的和、差、积、商以及余数运算:


// BigInteger
BigInteger bigInteger = new BigInteger("11111111111111111111111");
BigInteger bigInteger1 = new BigInteger("12345678910");
// +
BigInteger addRes = bigInteger.add(bigInteger1);
System.out.println(addRes);  // 11111111111123456790021
// -
BigInteger subRes = bigInteger.subtract(bigInteger1);
System.out.println(subRes);  // 11111111111098765432201
// *
BigInteger mulRes = bigInteger.multiply(bigInteger1);
System.out.println(mulRes);  // 137174210111111111111109739369010
// /
BigInteger divRes = bigInteger.divide(bigInteger1);
System.out.println(divRes);  // 900000007461
// %
BigInteger modRes = bigInteger.mod(bigInteger1);
System.out.println(modRes);  // 763601


BigInteger还提供了数值比较方法compareTo:

int compareTo(BigInteger other):

如果这个大整数与另一个大整数other相等,返回0;如果这个大整数小于另一个大整数other,返回负数;否则,返回正数


BigInteger bigInteger = new BigInteger("11111111111111111111111");
BigInteger bigInteger1 = new BigInteger("12345678910");
int i = bigInteger.compareTo(bigInteger1);
System.out.println(i);  // 1


3.BigDecimal


该类实现了超高精度的浮点数运算

大实数的和、差、积、商运算:


// BigDecimal
BigDecimal bigDecimal = new BigDecimal("1.1111111111111111111999999999999");
BigDecimal bigDecimal1 = new BigDecimal("1.234567");
// +
BigDecimal daddRes = bigDecimal.add(bigDecimal1);
System.out.println(daddRes);  // 2.3456781111111111111999999999999
// -
BigDecimal dsubRes = bigDecimal.subtract(bigDecimal1);
System.out.println(dsubRes);  // -0.1234558888888888888000000000001
// *
BigDecimal dmulRes = bigDecimal.multiply(bigDecimal1);
System.out.println(dmulRes);  // 1.3717411111111111112208503999998765433
// /,注意:如果不指定精度,结果是死循环小数,会抛出一个异常
// 该例指定得到一个四舍五入的结果
BigDecimal ddivRes = bigDecimal.divide(bigDecimal1, BigDecimal.ROUND_HALF_UP);
System.out.println(ddivRes);  // 0.9000006570004796104221156081443
目录
相关文章
|
6月前
|
小程序 数据可视化 Java
Java+后端Spring boot 开发的全套UWB定位方案,0.1米高精度定位系统源码
UWB定位系统由硬件定位设备、定位引擎和应用软件组成。该定位系统应用软件支持PC端和移动端访问,并提供位置实时显示、历史轨迹回放、人员考勤、电子围栏、行为分析、智能巡检等功能。定位精度高达10cm,同时具备高动态、高容量、低功耗的优点。应用场景包括:隧道、化工、工厂、煤矿、工地、电厂、养老、展馆、整车、机房、机场等。
110 8
|
7月前
|
Java
1276. 不浪费原料的汉堡制作方案 --力扣 --JAVA
圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。 给你两个整数 tomatoSlices 和 cheeseSlices,分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下: 巨无霸汉堡:4 片番茄和 1 片奶酪 小皇堡:2 片番茄和 1 片奶酪 请你以 [total_jumbo, total_small]([巨无霸汉堡总数,小皇堡总数])的格式返回恰当的制作方案,使得剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlices 的数量都是 0。 如果无法使剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlic
53 0
|
7月前
|
SQL Java 应用服务中间件
Java项目防止SQL注入的四种方案
Java项目防止SQL注入的四种方案
122 0
|
设计模式 Java
Java克隆方式避免频繁创建对象优化方案
Java克隆方式避免频繁创建对象优化方案
112 0
|
存储 缓存 Java
Java 序列化方案
在Java中,对象序列化是将一个对象的状态信息转换为字节流的过程,以便将其存储到文件或传输到另一个计算机。反序列化是将这个字节流转换回对象的过程。对象序列化和反序列化在Java编程中具有广泛的应用,例如远程方法调用、数据持久化和缓存等等。
78 0
|
5月前
|
安全 Java 数据安全/隐私保护
在Java项目中集成单点登录(SSO)方案
在Java项目中集成单点登录(SSO)方案
|
6月前
|
安全 Java UED
深度解析Java中方法内的异步调用实践与应对方案
深度解析Java中方法内的异步调用实践与应对方案
145 1
|
4月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
5月前
|
Java 关系型数据库 MySQL
GraalVM 静态编译下 OTel Java Agent 的自动增强方案与实现
在 2024 OpenTelemetry Community Day 会议中,阿里云可观测工程师张乎兴(望陶)和饶子昊(铖朴)为大家带来了《GraalVM 静态编译下 OTel Java Agent 的自动增强方案与实现》的演讲分享,介绍阿里云在相关领域的探索方案,本文是相关分享对应的中文整理。
265 17
|
5月前
|
存储 运维 安全
Java中的数据备份与灾难恢复方案设计
Java中的数据备份与灾难恢复方案设计