我是靠谱客的博主 时尚人生,最近开发中收集的这篇文章主要介绍biginteger判断相等_回顾JAVA中的大数: BigInteger和BigDecimal,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

今天看到了一道题:

有两个字符串类型的数字,实现一个方法将它们进行相加,并返回相加后的数值。

这个题看上去真的是太简单了,这不就是用 Integer.parseInt() 把字符串转成int型相加而已 , 但是再细想下你会发现如果字符串太长int型是盛不下的 ,那好办 用long 型 这不就解决了吗?  但是如果是一个 7000长度的字符型数字你怎么办?  如果它还不是个整型的字符串,还是个带小数的, float , double类型的还有精度丢失的问题那又怎么办?

这时我想到了BigInteger和BigDecimal 这两个类,也是因为好久没用过这两个类了,也在这回一下.

Java提供了两个用于高精度计算的类:BigInteger和BigDecimal。这两个类包含的方法、提供的操作与对基本类型所能执行的操作相似,只不过是以方法调用方式取代运算符方式来实现。等于是用速度换取了精度。

BigInteger支持任意精度的整数,在运算中可以准确地表示任何大小的整数值,而不会丢失任何信息。BigDecimal支持任何精度的定点数,可以用它进行精确的货币计算。

它们都扩展Number类且实现Comparable接口,可以使用new BigInteger(String)或new BigDecimal(String)来创建实例,使用add,substract,multiple,divide和remainder方法完成算数运算,使用compareTo方法比较两个大数字。

声明赋值

BigIntegerBigInteger bi = new BigInteger(“100”);

BigInteger bi = BigInteger.valueOf(100);

BigDecimalBigDecimal bd = new BigDecimal(100);

BigDecimal bd = BigDecimal.valueOf(100);

BigDecimal的构造函数比BigInteger多一些,感觉用起来更方便些,比如这样定义就是错误的:BigInteger bi = new BigInteger(100);

顺便说一下,java.util包中的Scanner类实现了nextBigInteger()和nextBigDecimal()方法,可以用来读入控制台输入的BigInteger和BigDecimal。

相关函数

BigIntegerimport 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) 

{

System.out.println("bd1 is lower than bd2");

}

//返回相反数

BigInteger bi3 = bi1.negate();

System.out.println("bi1的相反数:" + bi3);

//返回绝对值

System.out.println("bi1的绝对值:" + bi3.abs());

}

}

结果:构造两个BigInteger对象

bil = 20556385800764859

bi2 = 197123

bi1 + bi2 = 20556385800961982

bi1 - bi2 = 20556385800567736

bi1 * bi2 = 4052136438204171300657

bi1的2次方 = 422564997189887113373789409289881

bi1/bi2的整数商: 104282025947

bi1/bi2的余数: 14378

bi1 / bi2 = 104282025947--14378

bi1 + bi2 = 20556385800961982

bi1 is greater than bi2

bi1的相反数:-20556385800764859

bi1的绝对值:20556385800764859

BigDecimalimport java.math.BigDecimal;

/*

* 测试BigDecimal类的一些函数

*/

public class BigDecimalDemo

{

public static void main(String[] args)

{

System.out.println("构造两个BigDecimal对象");

//用char[]数组创建BigDecimal对象,第二个参数为位移offset,

//第三个参数指定长度

BigDecimal bd1 = new BigDecimal("3464656776868432998434".toCharArray(),2,15);

System.out.println("bd1 = " + bd1);

//用double类型创建BigDecimal对象

BigDecimal bd2 = new BigDecimal(134258767575867.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)

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) 

System.out.println("bd1 is lower than bd2");

//末位数据精度

System.out.println("bd1的末位数据精度:  " + bd1.ulp());

}

}

结果:构造两个BigDecimal对象

bd1 = 646567768684329

bd2 = 134258765070336

bd1 + bd2 = 780826533754665

bd1 - bd2 = 512309003613993

bd1 * bd2 = 86807390157840676971865964544

bd1的2次方 = 418049879501431972683650180241

bd1/bd2的整数商: 4

bd1/bd2的余数: 109532708402985

bd1 / bd2 = 4--109532708402985

bd1 is greater than bd2

bd1的末位数据精度:  1

当看完这两个类的常用方法后上面那个题写起来也就很容易了.

示例: -- 进攻参考public static void main(String[] args) {

String numStr1 = getBigDecimalNum();

System.out.println(numStr1.length());

String numStr2  = getBigDecimalNum();

//检测到的

if(isNumber(numStr1) && isNumber(numStr2)){

BigDecimal bigDecimalNum1 = new BigDecimal(numStr1);

BigDecimal bigDecimalNum2 = new BigDecimal(numStr2);

BigDecimal sum = bigDecimalNum1.add(bigDecimalNum2);

String value = sum.toString();

System.out.println(value.length());

System.out.println(value);

}

}

//随机生成个大数

public static String getBigDecimalNum() {

Random random = new Random();

StringBuilder stringBuilder = new StringBuilder();

for (int i = 0; i 

if (i == 70) {

stringBuilder.append(".");

}

stringBuilder.append(random.nextInt(99999999));

}

return stringBuilder.toString();

}

//粗略检测字符串是否是数字

public static boolean isNumber(String str) {

return null != str && str.matches("^[-+]?([0-9]+\.?)?[0-9]+$");

}

最后

以上就是时尚人生为你收集整理的biginteger判断相等_回顾JAVA中的大数: BigInteger和BigDecimal的全部内容,希望文章能够帮你解决biginteger判断相等_回顾JAVA中的大数: BigInteger和BigDecimal所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部