Java基础系列9:BigInteger类和BigDecimal类

简介:

一 BigInteger类

当我们碰到需要处理一个很大的数字时,这时候肯定没法使用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()来比较




本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1758640,如需转载请自行联系原作者
相关文章
|
2天前
|
Java 编译器
Java Character 类
4月更文挑战第13天
|
3天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
7天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
7天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
10 0
|
8天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
21 9
|
7天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【4月更文挑战第11天】 在Java中,高效的并发编程是提升应用性能和响应能力的关键。本文将探讨Java并发的核心概念,包括线程安全、锁机制、线程池以及并发集合等,同时提供实用的编程技巧和最佳实践,帮助开发者在保证线程安全的前提下,优化程序性能。我们将通过分析常见的并发问题,如竞态条件、死锁,以及如何利用现代Java并发工具来避免这些问题,从而构建更加健壮和高效的多线程应用程序。
|
1天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
1天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。
|
1天前
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。