java中的大数值

一 BigInteger类

今天看了一些java视频,里面讲到了大数值,当我们碰到需要处理一个很大的数字时或者要求精确度比较高的数字时,这时候肯定没法使用int和long。当然我们可以使用String来接收大数字,然后再采用拆分的方式来计算,不过这种方式很麻烦。因此在Java中为了解决这种问题,提供了BigInteger类。BigInteger类表示是大整数类,定义在java.math.*这个包中,如果操作的整数已经超过了整数的最大类型长度long,这时可以考虑使用BigInteger类来进行操作

常用方法的示例:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

package javase.base;

import java.math.BigInteger;

public class BigIntegerDemo {

    public static void main(String[] args) {

        BigInteger bInteger1 = new BigInteger("1234567890");

        BigInteger bInteger2 = new BigInteger("222222222");

        System.out.println("加:" + bInteger1.add(bInteger2));

        System.out.println("减: " + bInteger1.subtract(bInteger2));

        System.out.println("乘: " + bInteger1.multiply(bInteger2));

        System.out.println("除: " + bInteger1.divide(bInteger2));

        System.out.println("较大值: " + bInteger1.max(bInteger2));

        System.out.println("较小值: " + bInteger1.min(bInteger2));

        BigInteger result[] = bInteger1.divideAndRemainder(bInteger2); // 除法操作,结果数组分别是商和余数

        System.out.println("商: " + result[0] + ",余数: " + result[1]);

    }

}

输出:


1

2

3

4

5

6

7

加:1456790112

减: 1012345668

乘: 274348419725651580

除: 5

较大值: 1234567890

较小值: 222222222

商: 5,余数: 123456780

二 BigDecimal类

对于不需要精确结果的计算可以使用float和double,但是要想获得一个非常精确的结果,这时候就需要用到BigDecimal类了,同时BigDecimal类也可以进行大数的操作

常用方法示例:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

package javase.base;

import java.math.BigDecimal;

public class BigDecimalDemo {

    public static void main(String[] args) {

        double d1 = 233.333;

        double d2 = 10.24;

        BigDecimal bigDecimal1 = new BigDecimal(d1);

        BigDecimal bigDecimal2 = new BigDecimal(d2);

        

        System.out.println("加: " + bigDecimal1.add(bigDecimal2).doubleValue());

        System.out.println("减: " + bigDecimal1.subtract(bigDecimal2).doubleValue());

        System.out.println("乘: " + bigDecimal1.multiply(bigDecimal2).doubleValue());

        //保留8位小数,向最接近数字方向舍入的舍入模式

        System.out.println("除: " + bigDecimal1.divide(bigDecimal2, 8, BigDecimal.ROUND_HALF_UP));

        

        System.out.println("不进行舍入的结果: " + bigDecimal1.add(bigDecimal2));

    }

}

输出:


1

2

3

4

5

加: 243.573

减: 223.093

乘: 2389.32992

除: 22.78642578

不进行舍入的结果: 243.5729999999999986215470926254056394100189208984375

注:如果想要比较两个BigInteger类型或BigDecimal类型的变量是否相等,需要像String类型一样使用.equals()方法来比较,而不是简单的使用==来比较,如:


1

2

3

4

5

6

7

8

9

10

public static void main(String[] args) {

        double d2 = 10.24;

        BigDecimal bigDecimal2 = new BigDecimal(d2);

        

        BigDecimal bigDecimal3 = new BigDecimal(d2);

        if(bigDecimal3 == bigDecimal2)

            System.out.println("==来比较");

        if(bigDecimal3.equals(bigDecimal2))

            System.out.println(".equals()来比较");

    }

输出:


1

.equals()来比较

时间: 2024-11-10 21:42:46

java中的大数值的相关文章

java中10大常见异常

NO.1 java.lang.NullPointerException 这个异常大家肯定都经常遇到,异常的解释是 "程序遇上了空指针 ",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等.对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了.数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然

Java中4大基本加密算法解析

简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Code,散列消息鉴别码) 1. BASE64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以查看RFC2045-RFC2049,上面有MIME的详细规范.Base64编码可用于

Java中的大数字

其实Java语言并不能对现实生活中所有对象建模. 比如:实数.Java不能完全表示显示生活中的实数. Integer.MAX_VALUE : 2147483647 Integer.MIN_VALUE : -2147483648 如果超过要表示小于-2147483648或者大于2147483647的数字则需要考虑long Long.MAX_VALUE : 9223372036854775807 Long.MIN_VALUE : -9223372036854775808 如果long不能满足要求,则

java中Redis5大基本类型的用法

存储格式 基本用法 通过Jedis(封装了redis的Java客户端)对redis进行操作. Jedis工具类 public class JedisPoolUtil { private static JedisPool pool = null; static { //加载配置文件 InputStream in = JedisPoolUtil.class.getClassLoader().getResourceAsStream("redis.properties"); Propertie

Java中String和八大(九大)基本数据类型的关系

在java面试中,又让写/说出java中9大基本数据类型,以及他们相应的包装类! 看到这个题目我首先蒙了一下...WTF,公司不会犯这种低级错误吧,不是八大数据类型吗,何来9大,这个时候,估计是把String算到基本数据类型了, 所以要有利的反驳一下,当然口头辩驳是很不专业的,废话少说上代码: Object obj="AAAA"; //不会报错,因为 "AAAA" 生成出来就是一个对象 Object obj=100; //编译器报错,提示无法从int 类型强制转为O

Java中 intValue,parseInt,Valueof

  intValue() 1.intValue()是java.lang.Number类的方法,Number是一个抽象类.Java中所有的数值类都继承它.也就是说,不单是Integer有intValue方法,Double,Long等都有此方法. valueOf() String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 ,也就是 String.valueOf() 这个参数多载的方法 有以下几种 (1)String.valueOf(boolean b) : 将 bo

Java基础语法<五> 大数值BigInteger BigDecimal

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有平有用的类:BigInteger和BigDecimal.这两个类可以处理包含任意长度数字序列的数值. BigInteger类实现了任意精度的整数运算 BigDecimal实现了任意精度的浮点数运算 使用静态的valueOf方法可以将普通的数值转换为大数值: BigInteger a = BigInteger.valueOf(100); 遗憾的是,不能使用人们熟悉的算术运算符(+ *)处理大数值. 而需要使用大数

JAVA大数值问题总结

大数值问题: 如果基本的整数(如:int.long)和浮点数的精度不狗满足需求时,那么就可以用java.math包中的两个类BigInteger(任意精度的整数)和BigDecimal(任意精度的浮点数). 这两个类可以实现人一次长度数字的数值 BigInteger a = BigInteger.valueOf(100);//把100转换为大数类型的整数 使用valueOf()方法可以将普通的数值转化为大数 那么接下来,怎么用大数实现数值运算呢? 在JAVA中提供加法方法就是: BigInteg

【44】java大数值剖析

基本的整数和浮点型精度不能满足需求,那么可以使用java.math中的两个类:BigInteger和BigDecimal. BigInteger和BigDecimal介绍: 这两个类可以处理包含任意长度序列的数值. BIgInteger类实现了任意精度的整数计算.BigDecimal实现了任意精度的浮点数计算. 使用静态的valueOf方法可以将普通的数值转化位大数值 BigInteger a = BigInteger.valueOf(100); 使用: BIgInteger c = a.add