
正文
BigInteger&BigDecimal类
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
BigInteger类
当需要处理超过 long 数值范围的大整数时,java.math 包中的 BigInteger 类提供任意精度的整数运算。
构造方式
//构造方法,将BigInteger的十进制字符串表示形式转换为BigInteger
public BigInteger(String val); //构造方法,将指定基数的BigInteger的字符串表示形式转换为BigInteger
public BigInteger(String val, int radix);//静态方法,将一个long类型值转为BigInteger
public static BigInteger valueOf(long val);
常用方法
四则运算与取整求余取模
//加法
public BigInteger add(BigInteger val);//减法
public BigInteger subtract(BigInteger val);//乘法
public BigInteger multiply(BigInteger val);//除法(取整)
public BigInteger divide(BigInteger val);//求余
public BigInteger remainder(BigInteger val);//取整和求余,返回的是一个数组
public BigInteger[] divideAndRemainder(BigInteger val);//取模
public BigInteger mod(BigInteger val);
求余和取模对比
对于整型数 a,b 来说,取模运算或者求余运算的方法都是:
- 求整数商:
c = a/b; - 计算模或者余数:
r = a - c*b.
取模运算和求余运算在第一步不同:取余运算在取 c 的值时,向 0 方向舍入;而取模运算在计算 c 的值时,向负无穷方向舍入。因此,取模时结果的符号与 b 一致,求余时结果的符号与 a 一致。如果 a,b 都是正整数的话,求模与求余没有区别。
数学函数
//绝对值
public BigInteger abs();//取负
public BigInteger negate();//求幂
public BigInteger pow(int exponent);//最大公约数
public BigInteger gcd(BigInteger val);//最大值
public BigInteger max(BigInteger val);//最小值
public BigInteger min(BigInteger val);
获取基本类型的值
//不同于基本数值类型的包装类,此处并不是直接强转的
//如果太大intValue和longValue将分别返回低的32位和64位,longValue和doubleValue可能会被转换为无穷
//返回大整数的int值
public int intValue(); //返回大整数的long型值
public long longValue();//返回大整数的float类型的值
public float floatValue();//返回大整数的double类型的值
public double doubleValue();//下面四种方法转换时不会舍入或者转换,会进行数据长度的校验,长度不够将会抛出异常
public int longValueExact();
public long intValueExact();
public float shortValueExact();
public double byteValueExact();
位操作相关
//按位与
public BigInteger and(BigInteger val);//按位或
public BigInteger or(BigInteger val);//按位非
public BigInteger not();//按位异或
public BigInteger xor(BigInteger val);//按位与非(等效and(val.not()))
public BigInteger andNot(BigInteger val);//左移,相当于this << n,右边添0
public BigInteger leftShift(int n);//右移,相当于this >> n,左边负数添1,正数添0
public BigInteger rightShift(int n);//计算(this & (1<<n)) != 0
public boolean testBit(int n);//计算this|(1<<n)
public BigInteger setBit(int n);//计算this&~(1<<n)
public BigInteger clearBit(int n);//计算this^(1<<n)
public BigInteger flipBit(int n);
素数
//判断是否为素数
public boolean isProbablePrime(int certainty);
- 如果此 BigInteger 可能为素数,则返回 true,如果它一定为合数,则返回 false。如果
certainty <= 0,则返回 true,所以不要设置certainty <= 0。certainty 是调用方允许的不确定性的度量。如果该调用返回 true,则此 BigInteger 是素数的概率超出1 - 1/(2^certainty),此方法的执行时间与此参数的值是成比例的。
//返回有可能是素数的数
public static BigInteger probablePrime(int bitLength,Random rnd);
- 此方法返回的 BigInteger 是合数的概率不超出
2^-100。bitLength 是返回的 BigInteger 的 bitLength,rnd 是随机比特源,用这些随机比特选择用来进行质数测试的候选数。
//返回大于此BigInteger的可能为素数的第一个整数
public BigInteger nextProbablePrime();
- 此方法返回的数是合数的概率不超出
2^-100
其他方法
//获取符号位
public int signum();//返回此 BigInteger 的十进制字符串表示形式
public String toString();//返回此 BigInteger 的给定基数的字符串表示形式
public String toString(int radix);//返回一个 byte 数组,该数组包含此 BigInteger 的二进制补码表示形式
public byte[] toByteArray();//左边比右边数大,返回1,相等返回0,比右边小返回-1
public int compareTo(Big val);
public static void main(String[] args) {
BigInteger a = new BigInteger("13");
BigInteger b = BigInteger.valueOf(4);
int n = 3; //加
System.out.println(a.add(b));//17
//减
System.out.println(a.subtract(b));//9
//乘
System.out.println(a.multiply(b));//52
//除
System.out.println(a.divide(b));//3
//取模
System.out.println(a.mod(b));//1
//求余
System.out.println(a.remainder(b)); //1
//求幂
System.out.println(a.pow(n));//2197
//取绝对值
System.out.println(a.abs());//13
//取相反数
System.out.println(a.negate()); //-13
}
BigDecimal类
float 和 double 进行运算时会出现精度丢失,java.math 包中的 BigDecimal 类提供任意精度的整数运算。
构造方式
//创建一个具有参数所指定以String表示的数值的对象。
public BigDecimal(String value); //使用字符串方式,其它构造器最好不要使用//静态方式创建
public static BigDecimal valueOf(long val);
public static BigDecimal valueOf(double val);
常用方法
//加法
public BigDecimal add(BigDecimal augend); //减法
public BigDecimal subtract(BigDecimal subtrahend);//乘法
public BigDecimal multiply(BigDecimal multiplicand);//除法
public BigDecimal divide(BigDecimal divisor);//求余数
public BigDecimal remainder(BigDecimal divisor);//求相反数
public BigDecimal negate();//左边比右边数大,返回1,相等返回0,比右边小返回-1
public int compareTo(BigDecimal val);//绝对值
public BigDecimal abs();//值转换为字符串
public String toString();//值转换为double
public double doubleValue();//值转换为float
public float floatValue(); //值转换为long
public long longValue(); //值转换为int
public int intValue();
public static void main(String[] args) {
BigDecimal f1 = new BigDecimal("6");
BigDecimal f2 = BigDecimal.valueOf(1.2); System.out.println(f1.add(f2)); //7.2
System.out.println(f1.subtract(f2)); //4.8
System.out.println(f1.multiply(f2)); //7.2
System.out.println(f1.divide(f2)); //5 int a = f1.intValue();
System.out.println(a); //6 double b = f2.doubleValue();
System.out.println(b); //1.2
}
参考- https://www.cnblogs.com/noteless/p/9877957.html
- https://www.cnblogs.com/noteless/p/9896139.html
BigInteger&BigDecimal类的更多相关文章- Java大数处理类:BigInteger类和BigDecimal类
当我们要处理非常大的数据时,平常用的数据类型已不足以表示,在Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,这两个类在理论上只要计算机内存足够大就能够表示无线 ...
- BIgInteger类和BigDecimal类的理解
第一部分: 这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal; Bi ...
- Java学习笔记26(Math类、Arrays类、BigInteger类、BigDecimal类)
Math类:数学工具类,做一些数学计算,开方,对数,三角函数等 所有方法都是静态方法,不需要建立对象,直接用类名调用即可 示例: 这里写几个在日常开发中会用到的,比如三角函数之类的平时不会用到,了解即 ...
- 用C# BigInteger实现的BigDecimal类,终于可以直接做四则运算了。
https://code.google.com/p/dotnet-big-decimal/ 这是个BigDecimal类的开源项目,支持Operators +, - and *. 俺给改了改,加上了除 ...
- 14-03 java BigInteger类,BigDecimal类,Date类,DateFormat类,Calendar类
BigInteger类 发 package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进 ...
- BigInteger 类 和 BigDecimal 类
一 .BigInteger BigInteger类在计算和处理任意大小的整数方面是很有用的. BigInteger 任意大的整数,原则上是,只要你的计算机的内存足够大,可以有无限位的. BigInte ...
- 算法笔记--java的BigInteger类及BigDecimal类
引包:import java.math.*; BigInteger类: 可以使用构造方法:public BigInteger(String val),或者valueOf(int)函数,如: BigIn ...
- 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)
1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则) * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...
- BigInteger、BigDecimal类的使用详解
我们都知道在java里边long算是存储长度比较大的了,但是如果有很大的数我们应该怎么处理呢,不用怕,java还为我们准备了一个BigInteger的类,那么这个类到底能存储多大的数呢,这个一时还真不 ...
随机推荐- Swift语言学习
因为想要学Mac os x编程,中文教材太少了,看了很多厉害的英文教材,很多都是swift语言的了,所以决定先要大体学一下swift语言. 学习一门语言,第一件事看swift官方文档,这里附上Coco ...
- git flow的安装和使用
确保安装了git 1.windows系统下安装 进入cmd clone github上的gitflow到一个文件夹下 我这里clone到 c:\gitflow git clone git://gith ...
- 并行parallel和并发concurrent的区别
http://stackoverflow.com/questions/1050222/concurrency-vs-parallelism-what-is-the-difference Concurr ...
- C++实现顺序表
#include<iostream>using namespace std; typedef int DataType; class SeqList{public: SeqList( ...
- JavaScript原型模式
一.提到原型模式,和构造函数关系密切,先讲一下它 javascript没有类,通过函数来模拟实现类,用new来创建对象,函数内部的this指针来指向调用它的对象. 事例中创建对象myGril,这个对象 ...
- poj3276
Face The Right Way Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5121 Accepted: 237 ...
- redhat6.4配置yum
redhat6.4配置本地yum 1. 挂载(我喜欢放在/mnt下面) mount -t auto *** /mnt/redhat 或 cp *** /mnt/redhat ...
- 安卓程序代写 网上程序代写[原]BluetoothClass详解
一. BluetoothClass简介 1. 继承关系 public final class BluetoothClass extends Object implements Parcelable 该 ...
- Git: A分支上的commit提交到B分支上
1. 执行git log -3 --graph A,查看A分支下的commit: 注:commit 后面的hash值代表某个commit,这里把”82f1fb7138c5860cc775b4b5ea7 ...
- 搭建selenium + Python环境的总结:
安装Python+Selenium 写博客是一个不错的选择,首先,是担心自己忘掉,其次,可以供大家做一个参考: 其实,这是自己第一次搭建Python环境(之前用了一周的Idle),还是比较容易的吧: ...
- https://www.cnblogs.com/noteless/p/9877957.html
- https://www.cnblogs.com/noteless/p/9896139.html
- Java大数处理类:BigInteger类和BigDecimal类
当我们要处理非常大的数据时,平常用的数据类型已不足以表示,在Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,这两个类在理论上只要计算机内存足够大就能够表示无线 ...
- BIgInteger类和BigDecimal类的理解
第一部分: 这两个类位于java.math包内,要使用它们必须在类前面引用该包:import java.math.BigInteger;和import java.math.BigDecimal; Bi ...
- Java学习笔记26(Math类、Arrays类、BigInteger类、BigDecimal类)
Math类:数学工具类,做一些数学计算,开方,对数,三角函数等 所有方法都是静态方法,不需要建立对象,直接用类名调用即可 示例: 这里写几个在日常开发中会用到的,比如三角函数之类的平时不会用到,了解即 ...
- 用C# BigInteger实现的BigDecimal类,终于可以直接做四则运算了。
https://code.google.com/p/dotnet-big-decimal/ 这是个BigDecimal类的开源项目,支持Operators +, - and *. 俺给改了改,加上了除 ...
- 14-03 java BigInteger类,BigDecimal类,Date类,DateFormat类,Calendar类
BigInteger类 发 package cn.itcast_01; import java.math.BigInteger; /* * BigInteger:可以让超过Integer范围内的数据进 ...
- BigInteger 类 和 BigDecimal 类
一 .BigInteger BigInteger类在计算和处理任意大小的整数方面是很有用的. BigInteger 任意大的整数,原则上是,只要你的计算机的内存足够大,可以有无限位的. BigInte ...
- 算法笔记--java的BigInteger类及BigDecimal类
引包:import java.math.*; BigInteger类: 可以使用构造方法:public BigInteger(String val),或者valueOf(int)函数,如: BigIn ...
- 正则表达式、Calendar类、SimpleDateFormat类、Date类、BigDecimal类、BigInteger类、System类、Random类、Math类(Java基础知识十四)
1.正则表达式的概述和简单使用 * A:正则表达式(一个字符串,是规则) * 是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串.其实就是一种规则.有自己特殊的应用. * B: ...
- BigInteger、BigDecimal类的使用详解
我们都知道在java里边long算是存储长度比较大的了,但是如果有很大的数我们应该怎么处理呢,不用怕,java还为我们准备了一个BigInteger的类,那么这个类到底能存储多大的数呢,这个一时还真不 ...
随机推荐- Swift语言学习
因为想要学Mac os x编程,中文教材太少了,看了很多厉害的英文教材,很多都是swift语言的了,所以决定先要大体学一下swift语言. 学习一门语言,第一件事看swift官方文档,这里附上Coco ...
- git flow的安装和使用
确保安装了git 1.windows系统下安装 进入cmd clone github上的gitflow到一个文件夹下 我这里clone到 c:\gitflow git clone git://gith ...
- 并行parallel和并发concurrent的区别
http://stackoverflow.com/questions/1050222/concurrency-vs-parallelism-what-is-the-difference Concurr ...
- C++实现顺序表
#include<iostream>using namespace std; typedef int DataType; class SeqList{public: SeqList( ...
- JavaScript原型模式
一.提到原型模式,和构造函数关系密切,先讲一下它 javascript没有类,通过函数来模拟实现类,用new来创建对象,函数内部的this指针来指向调用它的对象. 事例中创建对象myGril,这个对象 ...
- poj3276
Face The Right Way Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5121 Accepted: 237 ...
- redhat6.4配置yum
redhat6.4配置本地yum 1. 挂载(我喜欢放在/mnt下面) mount -t auto *** /mnt/redhat 或 cp *** /mnt/redhat ...
- 安卓程序代写 网上程序代写[原]BluetoothClass详解
一. BluetoothClass简介 1. 继承关系 public final class BluetoothClass extends Object implements Parcelable 该 ...
- Git: A分支上的commit提交到B分支上
1. 执行git log -3 --graph A,查看A分支下的commit: 注:commit 后面的hash值代表某个commit,这里把”82f1fb7138c5860cc775b4b5ea7 ...
- 搭建selenium + Python环境的总结:
安装Python+Selenium 写博客是一个不错的选择,首先,是担心自己忘掉,其次,可以供大家做一个参考: 其实,这是自己第一次搭建Python环境(之前用了一周的Idle),还是比较容易的吧: ...
因为想要学Mac os x编程,中文教材太少了,看了很多厉害的英文教材,很多都是swift语言的了,所以决定先要大体学一下swift语言. 学习一门语言,第一件事看swift官方文档,这里附上Coco ...
确保安装了git 1.windows系统下安装 进入cmd clone github上的gitflow到一个文件夹下 我这里clone到 c:\gitflow git clone git://gith ...
http://stackoverflow.com/questions/1050222/concurrency-vs-parallelism-what-is-the-difference Concurr ...
#include<iostream>using namespace std; typedef int DataType; class SeqList{public: SeqList( ...
一.提到原型模式,和构造函数关系密切,先讲一下它 javascript没有类,通过函数来模拟实现类,用new来创建对象,函数内部的this指针来指向调用它的对象. 事例中创建对象myGril,这个对象 ...
Face The Right Way Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5121 Accepted: 237 ...
redhat6.4配置本地yum 1. 挂载(我喜欢放在/mnt下面) mount -t auto *** /mnt/redhat 或 cp *** /mnt/redhat ...
一. BluetoothClass简介 1. 继承关系 public final class BluetoothClass extends Object implements Parcelable 该 ...
1. 执行git log -3 --graph A,查看A分支下的commit: 注:commit 后面的hash值代表某个commit,这里把”82f1fb7138c5860cc775b4b5ea7 ...
安装Python+Selenium 写博客是一个不错的选择,首先,是担心自己忘掉,其次,可以供大家做一个参考: 其实,这是自己第一次搭建Python环境(之前用了一周的Idle),还是比较容易的吧: ...






