Java的Math包中提供了两个类用于对大数进行操作:

  • BigInteger类,用于大整数的操作
  • BigDecimal类,用于大的小数操作

BigInteger类

Java中的基本类型中,表示整数的有short, intlong,其中最大的long也只有64位,能表示的最大正整数是9223372036854775807,如果超过了这个数就无法使用基本数据类型表示了。

BigInteger类把数据以字符串的形式写入即计算。并且由于使用它需要创建对象,而且Java中没有提供运算符的重载,所以不能直接使用+ - * /这些运算符直接运算。需要进行运算操作时,可以使用该类提供的方法进行。

BigInteger类的二元运算需要两个操作数都为BigInteger,通常前一个操作数调用方法,后一个操作数作为参数。常用的方法如下:

public BigInteger(String val); // 构造方法,将一个字符串变为 BigInteger类型的数据
public BigInteger add(BigInteger val) // 加法,结果用BigInteger类型返回
public BigInteger subtract(BigInteger val) // 减法
public BigInteger multiply(BigInteger val) // 乘法
public BigInteger divide(BigInteger val) // 除法
public BigInteger max(BigInteger val) // 返回最大值
public BigInteger min(BigInteger val) // 返回最小值 // 带余数的除法操作,数组的第一个元素表示除法的商,第二个元素表示除法的余数
public BigInteger[] divideAndRemainder(BigInteger val)

示例

import java.math.BigInteger;

public class Test {
public static void main(String[] args) {
// 用来保存 两个大数
BigInteger b1 = new BigInteger("987654321098765432109876543210");
BigInteger b2 = new BigInteger("123456789012345678901234567890"); // 两个大数的运算(加减乘除、最大值、最小值)
System.out.println("b1 + b2 = " + b1.add(b2)); // 加
System.out.println("b1 - b2 = " + b1.subtract(b2)); // 减
System.out.println("b1 * b2 = " + b1.multiply(b2)); // 乘
System.out.println("b1 / b2 = " + b1.divide(b2)); // 除
System.out.println("max: " + b1.max(b2)); // 最大值
System.out.println("min: " + b1.min(b2)); // 最小值
System.out.println(); // 除法操作,数组的第一个元素是除法的商,第二个元素是除法的余数
BigInteger[] bArr = b1.divideAndRemainder(b2);
System.out.println("商:" + bArr[0]);
System.out.println("余数:" + bArr[1]);
}
}

BigDecimal类

BigDecimal是为了解决小数的精度问题而使用的。它也是使用字符串进行写入。

BigDecimal类的常用方法与BigInteger类相同,只不过操作数变成了BigDecimal类。

示例:

import java.math.BigDecimal;

public class Test {
public static void main(String[] args) {
// 用来保存 两个小数
BigDecimal b1 = new BigDecimal("1.00");
BigDecimal b2 = new BigDecimal("0.30"); // 两个小数的运算(加减乘除、最大值、最小值)
System.out.println("b1 + b2 = " + b1.add(b2)); // 加
System.out.println("b1 - b2 = " + b1.subtract(b2)); // 减
System.out.println("b1 * b2 = " + b1.multiply(b2)); // 乘
// 除法,开始四舍五入模式,否则可能会报 ArithmeticException
System.out.println("b1 / b2 = " + b1.divide(b2, BigDecimal.ROUND_HALF_UP));
System.out.println("max: " + b1.max(b2)); // 最大值
System.out.println("min: " + b1.min(b2)); // 最小值
System.out.println(); // 除法操作,数组的第一个元素是除法的商,第二个元素是除法的余数
BigDecimal[] bArr = b1.divideAndRemainder(b2);
System.out.println("商:" + bArr[0]);
System.out.println("余数:" + bArr[1]);
}
}

参考链接: CSDN 小异常

Java大数操作的更多相关文章

  1. Java大数操作类

    Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: packag ...

  2. (转)Java大数操作(BigInteger、BigDecimal)

    基础知识 对于二进制来说,最高位代表正负号,-0表示-128,+0表示032位系统int型4个字节:-(2的31次方) ~ (2的31次方) 减 1最大负数:10000000 00000000 000 ...

  3. 关于Java大数操作(BigInteger、BigDecimal)

    本文目标 可以使用BigInteger操作大整数 可以使用BigDecimal指定小数的保留位数 基础知识 对于二进制来说,最高位代表正负号,-0表示-128,+0表示032位系统int型4个字节:- ...

  4. Java的大数操作分为BigInteger和BigDecimal

    Java的大数操作分为BigInteger和BigDecimal,但这两给类是分开使用的,有时候在编程的时候显得略微繁琐,现在编写了一个将二者合二为一的大数操作类. 大数操作类代码如下: 1 pack ...

  5. Java基本的程序结构设计 大数操作

    大数操作 BigInteger 不可变的任意精度的整数.所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型).BigInteger 提供所有 Java 的基本整数操 ...

  6. BigInteger和BigDecimal大数操作

    有时候可能会碰到需要计算非常大的数,比如7777777777777777777777777*3333333333333333333333333333,这样的计算需要显然不能用之前的方式来进行.我们不能 ...

  7. Java 大数、高精度模板

    介绍: java中用于操作大数的类主要有两个,一个是BigInteger,代表大整数类用于对大整数进行操作,另一个是BigDecimal,代表高精度类,用于对比较大或精度比较高的浮点型数据进行操作.因 ...

  8. 【Java】-BigInteger大数类的使用【超强Java大数模板 总结】

    Scanner cin = new Scanner(new BufferedInputStream(System.in)); 这样定义Scanner类的对象读入数据可能会快一些! 参考这个博客继续补充 ...

  9. Java实现操作dos命令

    java实现操作dos命令的两种方式 1.读取文件中的命令 package com; import java.io.InputStream; public class cmd { public sta ...

随机推荐

  1. 【动画消消乐|CSS】083.纯CSS实现卡通齿轮效果

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

  2. ELK+kafka docker快速搭建+.NetCore中使用

    ELK开源实时日志分析平台.ELK是Elasticsearch,Logstash,Kibana 的缩写. Elasticsearch:是个开源分布式搜索引擎,简称ESLogstash:是一个完全开源的 ...

  3. 基于ScheduledExecutorService的并发定时任务处理能力测试

    测试代码 定时器类 package business.util; import java.util.concurrent.Executors; import java.util.concurrent. ...

  4. Java - Enum 枚举类型

    目录 前言 应用 定义 基本Enum特性 Enum的静态导入 Enum中添加新方法 Switch语句中的Enum Enum的继承 EnumSet的使用 EnumMap的使用 常量相关方法 枚举值向枚举 ...

  5. 模拟7 T3 寿司题解

    题目要求可以转化成一个01串,让通过最少次数把序列变成中间是0,两端是1: 首先我们可以考虑一些性质: 最优解一定是每次操作都把0和1交换 这个很好理解,如果你交换同一种东西,跟没换一样 这个题卡就卡 ...

  6. centos7上安装redis6-0-5

    下载tar包 wget http://download.redis.io/releases/redis-6.0.5.tar.gz 解压tar包 tar -zxvf redis-6.0.5.tar.gz ...

  7. mac Charles抓包

    手机配置http代理 1.配置iPhone或Android 的wifi配置.首先保证Mac电脑和手机是在同一个局域网内. 2.设置手机wifi配置,在HTTP代理中选择手选代理,服务器填写Mac的IP ...

  8. .net core 微服务参考文章

    网址: https://www.cnblogs.com/edisonchou/p/9124985.html Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Consul基础介绍 Co ...

  9. mysql 优化面试题

    第一方面:30种mysql优化sql语句查询的方法 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by涉及的列上建立索引. 2.应尽量避免在 where 子句中使用 ...

  10. 迭代器 与 foreach 的区别

    迭代器的常见运用--Eg:有一组数据 需要对每个符合条件的数据 进行记录 static void Main() { int[] s = new int[] { 1, 2, 8 }; foreach ( ...