Java⼤数字运算
在 java中提供了⼤数字的操作类,即 Java.math.BigInteger 类与 java.math.BigDecimal 类。这两个类⽤于⾼精度计算,其中BigInteger 类是针对⼤整数的处理,⽽BigDecimal 类则是针对⼤⼩数的处理类。
BigInteger
BigInteger 类型的数字范围较 Integer 类型的数字范围要⼤得多。BigInteger ⽀持任意精度的整数。
在 BigInteger 类中封装了多种操作,除了基本的加、减、乘、除操作之外,还提供了绝对值、相反数、最⼤公约数以及判断是否为质数等操作。
使⽤ BigInteger 类,可以实例化⼀个 BigInteger 对象,彬⾃动调⽤相应的构造函数。BigInteger 类具有很多构造函数,但最直接的⼀种是参数以字符串形式代表要处理的数字。
public BigInteger(String val);
val 是⼗进制数字符串
BigInteger twoInstance = new BigInteger("2");
下⾯列举了 BigInteger 类中常⽤的⼏种运算⽅法
public BigInteger add(BigInteger val);//做加法运算
public BigInteger subftract(BigInteger val);//做减法运算
public BigInteger multiply(BigInteger val);//做乘法运算
public BigInteger divide(BigInteger val);//做除法运算
public BigInteger remainder(BigInteger val);//做取余运算
public BigInteger[] divideAndReainder(BigInteger val);//⽤数组返回余数和商,结果数组中第⼀个值为商,第⼆个值为余数
public BigInteger pow(int exponent);//取参数的 exponent 次⽅操作
public BigInteger negate();//取相反数
public BigInteger shiftLeft(int n);//将数字左移 n 位,如果 n 为负数,做右移操作
public BigInteger shiftRight(int n);//将数字右移 n 位,如果 n 为负数,做左移操作
public BigInteger and(BigInteger val);//与操作
public BigInteger or(BigInteger val);//或操作
public int compareTo(BigInteger val);//数字⽐较操作
public boolean equals(Object x);//当参数x是BigInteger类型的珠⼦并且数值相等时,返回true
public BigInteger min(BigInteger val);//返回较⼩的数字
public BigInteger max(BigInteger val);//返回较⼤的数字
例⼦:实现⼤数的各种运算操作
public static void main(String[] args){
BigInteger bigInstance = new BigInteger("4");、、实例化⼀个⼤数字
//取该⼤数字加 2 的操作
System.out.println("加法操作:"+bigInstance.add(new BigInteger("2")));
/
/取该⼤数字减 2 的操作
System.out.println("减法操作:"+bigInstance.subtract(new BigInteger("2")));
//取该⼤数字乘 2 的操作
System.out.println("乘法操作:"+bigInstance.multiply(new BigInteger("2")));
//取该⼤数字除 2 的操作
System.out.println("除法操作:"+bigInstance.divide(new BigInteger("2")));
//取该⼤数字除以 3 的商
System.out.println("取商:"+bigInstance.divideAndReainder(new BigInteger("2"))[0]);
//取该⼤数字除以 3 的余数
System.out.println("取商:"+bigInstance.divideAndReainder(new BigInteger("2"))[1]);
//取该⼤数字的 2 次⽅
System.out.println("做 2 次⽅的操作:"+bigInstance.pow(2));
//取该⼤数字的相反数
System.out.println("取相反数操作:"+ate());
}
}
BigDecimal
⼀般的 float 型和 double 型数据只可以⽤来做科学计算或⼯程计算,但由于在商业计算中要求数字精度⽐较⾼,所以要⽤到java.math.BigDecimal 类。BigDecimal 类⽀持任何精度的定点数,可以⽤它来精确计算货币值。
两个常⽤的构造⽅法
publilc BigDecimal(double val);//将双精度型转换为 BigDecimal 类型
public BigDecimal(String val);//将字符串转换为 BigDecimal 类型
例⼦:⾼精度⼤⼩运算操作
static final int location = 10;
/**
加法运算
*/
public BigDecimal add(double value1, double value2){
BigDecimal b1 = new String(value1));        BigDecimal b2 = new String(value2));
return b1.add(b2);
}
/**
减法运算
*/
public BigDecimal add(double value1, double value2){
BigDecimal b1 = new String(value1));        BigDecimal b2 = new String(value2));
return b1.subtract(b2);
}
/**
乘法运算
*/
public BigDecimal add(double value1, double value2){
BigDecimal b1 = new String(value1));        BigDecimal b2 = new String(value2));
return b1.multiply(b2);
}
/**
除法运算
*/
public BigDecimal add(double value1, double value2){
return div(value1, value2, location);
}
//定义除法⽅法,参数分别为除数与被除数以及商⼩数点后的余数    public div(double value1, double value2, int b){
if (b <  0) {
System.out.printn("b 值必须⼤于等于 0 ");
}
BigDecimal b1 = new String(value1));        BigDecimal b2 = new String(value2));        return b1.divide(b2, b, BigDecimal.ROUND_HALF_UP);
}
}
⾯试题
下列程序的输出结果是什么?
import java.util.*;
import java.math.BigInteger;
import java.lang.*;
public class  Test  {
public static void main(String[]  args)throws NumberFormatException {
BigInteger  one=new    BigInteger("1");
BigInteger  two=new    BigInteger("2");
BigInteger  three=new  BigInteger("3");
BigInteger  sum=new    BigInteger("0");
sum.add(one);
sum.add(two);
sum.add(three);
System.out.String());
}
}
A. 6
bigdecimal转换为integer
B. 0
C. 1
D. 3
解析: 本题考的是Java中的⼤数类。
(1)BigInteger属于java.math.BigInteger,因此,在每次使⽤前都要import(输⼊)这个类,否则会提⽰不到提⽰符。
(2)BigInteger构造⽅法有很多,如:
BigInteger(String val)
//将BigInteger的⼗进制字符串表⽰形式转换为BigInteger
BigInteger(String val,int radix)
//将指定基数的BigInteger的字符串表⽰形式转换为BigInteger
如要将int型的2转换为BigInteger型,要写为:
BigInteger two=new BigInteger("2");//注意2的双引号不能省略
(3)BigInteger类模拟了所有的int型数学操作,如add()+,divide()-等,但注意进⾏数学运算时,不能直接使⽤数学运算符进⾏运算,必须使⽤其内部⽅法,⽽且其操作数也必须为BigInteger型。
如:two.add(2)就是⼀种错误的操作,因为2没有改为BigInteger型。
对本题⽽⾔,sum返回⼀个biginteger的值并不改变原来的变量,所以sum的值始终为0。如果想得到6的结果,必须显式地返回,代码如下:
import java.util.*;
import java.math.BigInteger;
import java.lang.*;
public class  Test  {
public static void main(String[]  args)throws NumberFormatException {
BigInteger  one=new    BigInteger("1");
BigInteger  two=new    BigInteger("2");
BigInteger  three=new  BigInteger("3");
BigInteger  sum=new    BigInteger("0");
sum = sum.add(one);
sum = sum.add(two);
sum = sum.add(three);
System.out.String());
}
}
答案: B

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。