9_4、Java基本语法之System、Math、BigInteger与BigDecimal类的使用

本文介绍了Java中的System类,包括其成员变量如标准输入/输出流,以及currentTimeMillis(),exit(),gc()和getProperty()等方法。接着讨论了Math类提供的科学计算方法。最后,详细阐述了BigInteger和BigDecimal类,用于处理任意精度的整数和十进制定点数,并展示了相关方法的使用示例。

一、System类的使用

        1、System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。 该类位于java.lang包。 由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实 例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便 的进行调用。

        2、成员变量:System类内部包含in、out和err三个成员变量,分别代表标准输入流 (键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。

         3、成员方法

        ①native long currentTimeMillis(): 该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时 间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。

        ②void exit(int status): 该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表 异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。

        ③void gc(): 该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则 取决于系统中垃圾回收算法的实现以及系统执行时的情况。

        ④String getProperty(String key): 该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见 的属性名以及属性的作用如下表所示:

    @Test
    public void test1(){
        String javaVersion = System.getProperty("java.version");
        System.out.println("java的version:" + javaVersion);
        String javaHome = System.getProperty("java.home");
        System.out.println("java的home:" + javaHome);
        String osName = System.getProperty("os.name");
        System.out.println("os的name:" + osName);
        String osVersion = System.getProperty("os.version");
        System.out.println("os的version:" + osVersion);
        String userName = System.getProperty("user.name");
        System.out.println("user的name:" + userName);
        String userHome = System.getProperty("user.home");
        System.out.println("user的home:" + userHome);
        String userDir = System.getProperty("user.dir");
        System.out.println("user的dir:" + userDir);
    }

二、Math类的使用

       1、java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回 值类型一般为double型。

        2、成员变量

         3、成员方法

三、BigInteger与BigDecimal类的使用

        1、BigInteger可以表示不可变的任意精度的整数

                1.1、常用方法


        2、BigDecimal类支持不可变的、任意精度的有符号十进制定点数

                2.1构造器

                        public BigDecimal(double val)

                        public BigDecimal(String val)

                2.2常用方法

 

    @Test
    public void test2(){
        BigInteger bi = new BigInteger("124332154165416546441123");
        BigDecimal bd = new BigDecimal("12435.351");
        BigDecimal bd2 = new BigDecimal("11");
        System.out.println(bi);
// System.out.println(bd.divide(bd2));
        System.out.println(bd.divide(bd2, BigDecimal.ROUND_HALF_UP));
        System.out.println(bd.divide(bd2, 15, BigDecimal.ROUND_HALF_UP));
    }

 

<think>首先,用户的问题是:“我想理解BigIntegerBigDecimalJava中的区别 请问JavaBigIntegerBigDecimal的区别”。我需要基于提供的引用信息来回答。 从系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用,但用户真正的需求是理解BigIntegerBigDecimal的区别。 引用信息摘要: - [^1]: BigIntegerBigDecimal用于处理大数和高精度数值,在java.math包中。 - [^2]: BigDecimalBigInteger和scale组成,表示任意大小且精度准确的浮点数。 - [^3]: BigInteger通过int数组存储大整数,从低位到高位存储。最大整数位数约为536,870,912位。 - [^4]: BigDecimal用于精确的小数或浮点数计算,尤其在金融领域,避免浮点数舍入误差。 - [^5]: BigInteger处理大整数,整数位数超过long的最大值(9,223,372,036,854,775,807)时使用。 关键区别: 1. **用途**: - BigInteger:处理任意大的整数(没有小数部分)。 - BigDecimal:处理任意精度的十进制数(有小数部分),避免浮点数精度问题。 2. **内部实现**: - BigInteger使用int数组存储整数位,从低位到高位。 - BigDecimal:由BigInteger(未缩放值)和scale(小数位数)组成。 3. **精度**: - BigInteger:精确整数运算。 - BigDecimal:精确小数运算,支持指定精度。 4. **应用场景**: - BigInteger:当整数超出long或int范围时使用。 - BigDecimal:在金融计算、科学计算中需要精确小数时使用。 回答结构: 1. **引言**:简要介绍两者。 2. **主要区别**:逐步解释用途、实现、精度等。 3. **代码示例**:如果可能,添加简单代码示例(但用户未要求代码,所以可选)。 4. **总结**:强调核心区别。 5. **生成相关问题**:在末尾添加。 生成相关问题: - 基于主题,生成3-5个相关问题。 使用中文回答。 确保LaTeX格式正确:如果有数学表达式,用$...$或$$...$$。 在回答中引用时,添加[^n]标识。 最终回答: - 开头:直接回答问题。 - 主体:清晰、逐步解释。 - 结尾:相关问题。</think>### JavaBigIntegerBigDecimal的区别 在Java中,`BigInteger`和`BigDecimal`都是`java.math`包中的,用于处理超出基本数据型范围的高精度数值计算。它们的主要区别在于处理的数据型、内部实现和应用场景。下面我将逐步解释这些区别,帮助您全面理解。 #### 1. **用途和数据型** - **BigInteger**:专门用于处理**任意大的整数**(没有小数部分)。当整数超出`long`型的最大值($9,223,372,036,854,775,807$)时,就需要使用它。例如,在加密算法或大数计算中[^1]。 - **BigDecimal**:用于处理**任意精度的十进制数**(包括小数部分)。它在金融、科学计算等领域特别重要,因为基本型如`double`或`float`存在浮点数舍入误差,而`BigDecimal`能确保精确的十进制表示[^4]。 #### 2. **内部实现** - **BigInteger**:通过一个`int`数组存储整数位,每个`int`元素代表32位二进制数。数组从低位到高位存储(例如,数组索引0存储最低位)。这允许它处理极大整数,最大位数约为$536,870,912$位(基于`int`数组的最大长度)[^3]。 - **BigDecimal**:由两部分组成:一个`BigInteger`对象存储未缩放的整数值(unscaled value),和一个`scale`字段记录小数位数。例如,数字$123.4567$表示为`BigInteger(1234567)`和`scale(4)$,这确保了任意大小和精度的浮点数计算[^2]。 #### 3. **精度和计算特性** - **BigInteger**:提供精确的整数运算,如加法、减法、乘法和除法。它不支持小数操作,所有结果都是整数[^5]。 - **BigDecimal**:提供精确的小数运算,包括四舍五入和精度控制。例如,您可以指定计算时的舍入模式(如`ROUND_HALF_UP`),避免`float`或`double`的精度丢失问题[^4]。这在涉及货币计算时至关重要。 #### 4. **应用场景** - **BigInteger**:适用于大整数计算,如密码学中的大素数生成、大数据分析中的计数或阶乘计算(例如,$100!$ 的值)[^1]。 - **BigDecimal**:适用于需要高精度小数的场景,如银行利息计算、科学实验数据模拟或任何要求零误差的浮点数运算[^4]。 #### 5. **代码示例对比** 以下是一个简单示例,展示两者的基本用法: ```java import java.math.BigInteger; import java.math.BigDecimal; public class Example { public static void main(String[] args) { // BigInteger示例:计算大整数乘法 BigInteger bigInt1 = new BigInteger("12345678901234567890"); BigInteger bigInt2 = new BigInteger("98765432109876543210"); BigInteger product = bigInt1.multiply(bigInt2); // 精确整数结果 System.out.println("BigInteger Product: " + product); // BigDecimal示例:精确小数计算 BigDecimal bigDec1 = new BigDecimal("123.456"); BigDecimal bigDec2 = new BigDecimal("789.012"); BigDecimal sum = bigDec1.add(bigDec2); // 精确小数结果,无舍入误差 System.out.println("BigDecimal Sum: " + sum); } } ``` 在这个示例中,`BigInteger`处理整数乘法,而`BigDecimal`确保小数加法完全精确。 #### 总结 核心区别在于:`BigInteger`是**整数专用**,处理超大整数;`BigDecimal`是**小数专用**,提供高精度浮点数计算。选择哪个取决于您的数据型需求:如果需要避免整数溢出,用`BigInteger`;如果需要避免浮点误差,用`BigDecimal`[^1][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值