BigInteger和BigDecimal
数据类型:
数据类型 类型名 位长 取值范围默认值
布尔型 boolean 1 true,false false
字节型 byte 8 -128-127 0
字符型 char 16 ‘\u000’-\uffff ‘\u0000’
短整型 short 16 -32768-32767 0
整型 int 32-2147483648,2147483647 0
长整型 long 64-9.22E18,9.22E180
浮点型 float 32 1.4E-45-3.4028E+38 0.0
双精度型 double 644.9E-324,1.7977E+308 0.0
在Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大。 这两个类都在java.math.*包中,因此每次必须在开头处引用该包。
Ⅰ基本函数:
1.valueOf(parament); 将参数转换为制定的类型
比如 int a=3;
BigInteger b=BigInteger.valueOf(a);
则b=3;
String s=”12345”;
BigInteger c=BigInteger.valueOf(s);
则c=12345;
2.add(); 大整数相加
3.subtract(); 相减
4.multiply(); 相乘
5.divide(); 相除取整
6.remainder(); 取余
7.pow(); a.pow(b)=a^b
8.gcd(); 最大公约数
9.abs(); 绝对值
10.negate(); 取反数
11.mod();
1.valueOf(parament); 将参数转换为制定的类型
比如 int a=3;
BigInteger b=BigInteger.valueOf(a);
则b=3;
String s=”12345”;
BigInteger c=BigInteger.valueOf(s);
则c=12345;
2.add(); 大整数相加
3.subtract(); 相减
4.multiply(); 相乘
5.divide(); 相除取整
6.remainder(); 取余
7.pow(); a.pow(b)=a^b
8.gcd(); 最大公约数
9.abs(); 绝对值
10.negate(); 取反数
11.mod();
a.mod(b)=a%b=a.remainder(b);
12.max(); min();
13.punlic int comareTo();
14.boolean
equals(); 是否相等
12.max(); min();
13.punlic int comareTo();
14.boolean
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
static final int location = 10;//小数点后位数
//加法 返回 num1+num2
public double add(double num1, double num2){
BigDecimal b1 = new BigDecimal(num1);
BigDecimal b2 = new BigDecimal(num2);
return b1.add(b2).doubleValue();
}
//减法 返回 num1-num2
public double sub(double num1, double num2){
BigDecimal b1 = new BigDecimal(num1);
BigDecimal b2 = new BigDecimal(num2);
return b1.subtract(b2).doubleValue();
}
//乘法 返回 num1*num2
public double mul(double num1, double num2){
BigDecimal b1 = new BigDecimal(num1);
BigDecimal b2 = new BigDecimal(num2);
System.out.println("###" + b1.add(b2));
return b1.multiply(b2).doubleValue();
}
//除法 返回 num1/num2
public double div(double num1, double num2){
return div(num1,num2,location);
}
//除法 返回num1/num2 自定义小数点后位数
public double div(double num1, double num2, int _location){
BigDecimal b1 = new BigDecimal(num1);
BigDecimal b2 = new BigDecimal(num2);
return b1.divide(b2,_location,BigDecimal.ROUND_HALF_UP).doubleValue();
}
public static void main(String[] args) {
Main m = new Main();
System.out.println(m.add(1232.2,123.333));
System.out.println(m.sub(222222.4, 74673246723647.5));
System.out.println(m.mul(2347.34, 34324324.324234));
System.out.println(m.div(100, 200));
System.out.println(m.div(100, 201, 10));
System.out.println();
System.out.println("####");
BigInteger b1 = new BigInteger("10000");
System.out.println(b1.remainder(new BigInteger("11")));
System.out.println(b1.pow(2));
System.out.println(b1.gcd(new BigInteger("12")));
System.out.println(b1.negate());
System.out.println(b1.compareTo(b1));
System.out.println(b1.equals(b1));
}
}
equals(); 是否相等
15.BigInteger构造函数:
一般用到以下两种:
BigInteger(String val); 将指定字符串转换为十进制表示形式;
BigInteger(String val,int radix); 将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger
Ⅱ.基本常量:
A=BigInteger.ONE 1
B=BigInteger.TEN 10
C=BigInteger.ZERO 0
16.
初始化 BigDecimal a=
new
BigDecimal(
"1.35"
);
对数值取值:
1
.a.setScale(
1
,BigDecimal.ROUND_DOWN);//
取一位小数,直接删除后面多余位数,故取值
1.3
.
2
.a.setScale(
1
,BigDecimal.ROUND_UP);//
取一位小数,删除后面位数,进一位,故取值
1.4
.
3
.a.setScale(
1
,BigDecimal.ROUND_HALF_UP);//
取一位小数,四舍五入,故取值
1.4
.
4
.a.setScale(
1
,BigDecimal.ROUND_HALF_DOWN);//
取一位小数,五舍六入,故取值
1.3
.
17.compare的详解如下:
compareTo
public int compareTo(BigInteger val)将此 BigInteger 与指定的 BigInteger 进行比较。
compareTo
public int compareTo(BigInteger val)将此 BigInteger 与指定的 BigInteger 进行比较。
对于针对六个布尔比较运算符 (<, ==, >, >=, !=, <=) 中的每一个运算符的各个方法,优先提供此方法。
执行这些比较的建议语句是:(x.compareTo(y) <op> 0),其中 <op> 是六个比较运算符之一。
指定者:
接口 Comparable<BigInteger> 中的 compareTo
参数:
val - 将此 BigInteger 与之比较的 BigInteger。
指定者:
接口 Comparable<BigInteger> 中的 compareTo
参数:
val - 将此 BigInteger 与之比较的 BigInteger。
if( a.compareTo(b) == 0 ) System.out.println("a == b"); //大整数a==b
else if( a.compareTo(b) > 0 ) System.out.println("a > b"); //大整数a>b
else if( a.compareTo(b) < 0 ) System.out.println("a < b"); //大整数a<b
读入:
用Scanner类定义对象进行控制台读入,Scanner类在java.util.*包中
用Scanner类定义对象进行控制台读入,Scanner类在java.util.*包中
Scanner cin=new Scanner(System.in);// 读入
while(cin.hasNext()){ // 等同于!=EOF
int n;
BigInteger m;
n = cin.nextInt(); // 读入一个int;
m = cin.nextBigInteger();// 读入一个BigInteger;
System.out.print(m.toString());
}
System.out.println(a.toString());
//返回大整数p进制的字符串表示
int p=8;
System.out.println(a.toString(p));