biginteger和integer的区别_bigint对应java什么类型

(4) 2024-08-01 21:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
biginteger和integer的区别_bigint对应java什么类型,希望能够帮助你!!!。

如果要进行非常大的数的计算或者高精度浮点值的计算,可以使用java.math包中的BigInteger类和BigDecimal类。它们都是不可变的。它们都扩展Number类且实现Comparable接口。long类型的最大整数值为long.MAX_VALUE。BigInteger的实例可以表示任意大小的整数。可以使用new BigInteger(String)和new BigDecimal(String)来创建BigInteger和BigDecimal的实例,使用add,substract,multiple,divide和remainder方法完成算数运算,使用compareTo方法比较两个大数字。

BigInteger:

例如,下面的代码创建两个BigInteger对象并且将他们进行相乘:

BigInteger a = new BigInteger("");
BigInteger b = new BigInteger("2");
BigInteger c = a.multiply(b);
System.out.printlin(c);

它的输出为.

BigDecimal:

对BigDecimal对象的精度没有限制。如果结果不能终止,那么divide方法会抛出ArithmeticException异常。但是,可以使用重载的divide(BigDecimal d,int scale,int roundingMode)方法来指定尺度和舍入方式来避免这个异常,这里的scale是指小数点后最小的整数位数.例如,下面的代码创建两个尺度为20,舍入方式为BigDecimal.ROUND_UP的BigDecimal对象。

BigDecimal a = new BigDecimal(1.0);
BigDecimal b = new BigDecimal(3);
BigDecimal c = a.divide(b,20,BigDecimal.ROUND_UP);
System.out.println(c);

输出为0.。

java代码:求阶乘

biginteger和integer的区别_bigint对应java什么类型_https://bianchenghao6.com/blog__第1张

import java.math.*;
import java.utils.Scanner;
public class LargeFactorial
{
  public static void main(String[] args)
  {
    scanner input = new Scanner(System.in);
    long n = input.nextLong();
    System.out.println(factorial(n));
  }
  public static BigInteger factorial(long n)
  {
    BigInteger result = BigInteger.ONE;
    for (int i = 1; i <= n; i++)
    {
      result = result.multply(new BigInteger(i));
    }
    return result;
  }
}

biginteger和integer的区别_bigint对应java什么类型_https://bianchenghao6.com/blog__第2张

package mooc; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Scanner; public class bigdecimal { 
    public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); BigDecimal bigNum = new BigDecimal(Long.MAX_VALUE).add(BigDecimal.ONE); BigDecimal newBigNum = bigNum.divide(new BigDecimal(n),0,RoundingMode.HALF_DOWN); for(int i = 0; i < 3; i++) { System.out.println(newBigNum.add(new BigDecimal(i)).multiply(new BigDecimal(n))); } input.close(); } }

一.常量
BigInteger:ONE,ZERO,TEN分别代表1,0,10.
其定义类似于:public static final BigInteger ONE = valueOf(1);
BigDecimal:除了以上三个常量外还有8个关于舍入的常量,这里不再赘述,可以去查看API的帮助手册.
顺便说一句,BigDecimal由于舍入模式的存在,使得这个类用起来比BigInteger要复杂.这里不再赘述,具体可以查看API的帮助手册,但是平时对起复杂特性用的不多,所以用的时候查阅API也是可行的.
二.声明赋值
BigInteger:BigInteger bi = new BigInteger(“100”);或:BigInteger bi = BigInteger.valueOf(100);
数组定义与基本类型类似.
BigDecimal:BigDecimal bd = new BigDecimal(100);或:BigDecimal bd = BigDecimal.valueOf(100);
BigDecimal的构造函数比BigInteger多一些,感觉用起来更方便些,比如这样定义就是错误的:BigInteger bi = new BigInteger(100);
顺便说一下,java.util包中的Scanner类实现了nextBigInteger()和nextBigDecimal()方法,可以用来读入控制台输入的BigInteger和BigDecimal.给个例子:

Scanner input = new Scanner(System.in); while(input.hasNext()) {   BigInteger bi;   //BigDecimal bd;   bi = input.nextBigInteger();//读入BigInteger   //bd = input.nextBigDecimal();//读入BigDecimal   System.out.println(bi.toString());   //System.out.println(bd.toString()) }

三.相关函数
主要介绍一下四则运算等函数:
用两个例子来说明比较直观一些:
BigInteger:

import java.math.BigInteger; import java.util.Random; /* * 测试BigInteger类的一些函数 */ public class BigIntegerDemo { public static void main(String[] args) { System.out.println("构造两个BigInteger对象"); //BigInteger(int numBits,Random rnd) //构造一个随机生成的 BigInteger,它是在 0 到 (2^numBits - 1)(包括)范围内均匀分布的值 BigInteger bi1 = new BigInteger(55,new Random()); System.out.println("bil = " + bi1); //BigInteger(byte[] val)  //将包含 BigInteger 的二进制补码表示形式的 byte 数组转换为 BigInteger。 BigInteger bi2 = new BigInteger(new byte[]{ 
  3,2,3}); System.out.println("bi2 = " + bi2); //加 System.out.println("bi1 + bi2 = " + bi1.add(bi2)); //减 System.out.println("bi1 - bi2 = " + bi1.subtract(bi2)); //乘 System.out.println("bi1 * bi2 = " + bi1.multiply(bi2)); //指数运算 System.out.println("bi1的2次方 = " + bi1.pow(2)); //整数商 System.out.println("bi1/bi2的整数商: " + bi1.divide(bi2)); //余数 System.out.println("bi1/bi2的余数: " + bi1.remainder(bi2)); //整数商+余数  System.out.println("bi1 / bi2 = " + bi1.divideAndRemainder(bi2)[0] + "--" + bi1.divideAndRemainder(bi2)[1]); System.out.println("bi1 + bi2 = " + bi1.add(bi2)); //比较大小,也可以用max()和min()  if(bi1.compareTo(bi2) > 0) { System.out.println("bi1 is greater than bi2"); } else if(bi1.compareTo(bi2) == 0) { System.out.println("bi1 is equal to bi2"); } else if(bi1.compareTo(bi2) < 0) { System.out.println("bd1 is lower than bd2"); } //返回相反数 BigInteger bi3 = bi1.negate(); System.out.println("bi1的相反数:" + bi3); //返回绝对值 System.out.println("bi1的绝对值:" + bi3.abs()); } } 

biginteger和integer的区别_bigint对应java什么类型_https://bianchenghao6.com/blog__第3张
BigInteger:

import java.math.BigDecimal; /* * 测试BigDecimal类的一些函数 */ public class BigDecimalDemo { public static void main(String[] args) { System.out.println("构造两个BigDecimal对象"); //用char[]数组创建BigDecimal对象,第二个参数为位移offset, //第三个参数指定长度 BigDecimal bd1 = new BigDecimal("".toCharArray(),2,15);  System.out.println("bd1 = " + bd1);  //用double类型创建BigDecimal对象 BigDecimal bd2 = new BigDecimal(5867.0F);  System.out.println("bd2 = " + bd2); //加 System.out.println("bd1 + bd2 = " + bd1.add(bd2));  //减 System.out.println("bd1 - bd2 = " + bd1.subtract(bd2));  //乘 System.out.println("bd1 * bd2 = " + bd1.multiply(bd2));  //指数运算 System.out.println("bd1的2次方 = " + bd1.pow(2));  //取商的整数部分 System.out.println("bd1/bd2的整数商: " + bd1.divideToIntegralValue(bd2));  //返回余数计算为:this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) //System.out.println(bd1.subtract(bd1.divideToIntegralValue(bd2).multiply(bd2)));  System.out.println("bd1/bd2的余数: " + bd1.remainder(bd2));  //取商和余,即bd1.divideToIntegralValue(bd2)与bd1.remainder(bd2) //取商和余,即bd1.divideToIntegralValue(bd2)与bd1.remainder(bd2) System.out.println("bd1 / bd2 = " + bd1.divideAndRemainder(bd2)[0] + "--" + bd1.divideAndRemainder(bd2)[1]);  //比较大小,也可以用max()和min() if(bd1.compareTo(bd2) > 0) System.out.println("bd1 is greater than bd2");  else if(bd1.compareTo(bd2) == 0) System.out.println("bd1 is equal to bd2");  else if(bd1.compareTo(bd2) < 0) System.out.println("bd1 is lower than bd2");  //末位数据精度 System.out.println("bd1的末位数据精度: " + bd1.ulp()); } }

biginteger和integer的区别_bigint对应java什么类型_https://bianchenghao6.com/blog__第4张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复