思维导图:



6.4.1 BigInteger类
定义与应用场景
- 用途: 用于处理超出标准整型(如int或long)范围的大整数。
- 场景: 在需要处理大数运算,如加密、大数统计等领域。
主要特点
- 定义于
java.math包中。 - 用于表示非常大的整数,无标准数值类型限制。
构造方法
BigInteger(String val): 将字符串转换为BigInteger对象。
常用方法
add(BigInteger val): 返回两个BigInteger对象的和。subtract(BigInteger val): 返回两个BigInteger对象的差。multiply(BigInteger val): 返回两个BigInteger对象的乘积。divide(BigInteger val): 返回两个BigInteger对象的商。max(BigInteger val): 返回两个BigInteger对象中的较大值。min(BigInteger val): 返回两个BigInteger对象中的较小值。divideAndRemainder(BigInteger val): 返回除法的商和余数的数组。
示例应用
- 示例(Example19.java)展示了如何创建
BigInteger对象并执行基本运算。 - 包括加法、减法、乘法、除法、比较大小和求余数等操作。
易错点
- 将非字符串格式直接传递给
BigInteger构造函数,如直接使用数字。 - 在进行除法操作时不处理余数,特别是在精确的数学计算中。
- 忽略
BigInteger操作的性能影响,尤其在处理极大数值时。
总结
BigInteger类是处理超大整数的强大工具,尤其适用于超出标准整型范围的场景。熟练掌握其基本运算方法对于实现高效和准确的大数计算至关重要。同时,要注意合理使用以避免潜在的性能问题。
我的理解:
1. 构造方法: BigInteger(String val)
- 用途: 将字符串表示的数值转换为
BigInteger对象。 - 使用场景: 当数值太大而无法用标准整型(如int或long)表示时。
- 技巧: 确保传入的字符串是有效的数值字符串。
- 错误点: 传入非数值字符串会抛出
NumberFormatException。
2. add(BigInteger val)
- 用途: 求两个
BigInteger对象的和。 - 使用场景: 在进行大数加法运算时。
- 技巧: 注意加法的结果可能超出标准整型范围。
- 错误点: 忽略结果大小,导致内存消耗过大。
3. subtract(BigInteger val)
- 用途: 求两个
BigInteger对象的差。 - 使用场景: 在进行大数减法运算时。
- 技巧: 和
add类似,注意结果大小。 - 错误点: 同样是忽略结果大小的问题。
4. multiply(BigInteger val)
- 用途: 求两个
BigInteger对象的乘积。 - 使用场景: 在进行大数乘法运算时。
- 技巧: 乘法的结果可能远大于加法或减法,要特别注意内存消耗。
- 错误点: 大数乘法可能导致极大的内存消耗。
5. divide(BigInteger val)
- 用途: 求两个
BigInteger对象的商。 - 使用场景: 在进行大数除法运算时。
- 技巧: 除以0会抛出
ArithmeticException,需进行检查。 - 错误点: 忽略除数为0的情况。
6. max(BigInteger val) & min(BigInteger val)
- 用途: 比较两个
BigInteger对象的大小。 - 使用场景: 在需要找出最大值或最小值时。
- 技巧: 直接使用,无需额外配置。
- 错误点: 没有特别的易错点。
7. divideAndRemainder(BigInteger val)
- 用途: 同时获取除法的商和余数。
- 使用场景: 在需要除法结果和余数时。
- 技巧: 返回的数组中,第一个元素是商,第二个元素是余数。
- 错误点: 忽视余数的重要性,尤其在精确计算时。
总结
BigInteger类在处理超大数值时非常有用,但使用时需注意数值的有效性和内存消耗。除法操作需要特别注意除数是否为0。此外,由于BigInteger涉及的数值通常非常大,因此在性能和资源消耗方面要比标准整型操作更加谨慎。

6.4.2 BigDecimal类
定义与应用场景
- 用途: 用于精确的浮点数运算。
- 场景: 主要用于高精度计算,如金融、科学计算和技术领域,特别是在商业计算和货币值计算中。
主要特点
- 能够表示任意精度的小数,解决了float和double类型的精度丢失问题。
构造方法和静态工厂
BigDecimal(String val): 通过字符串构造BigDecimal。static BigDecimal valueOf(double d): 通过double类型值创建BigDecimal对象。
常用方法
add(BigDecimal val): 返回两个BigDecimal对象的和。subtract(BigDecimal val): 返回两个BigDecimal对象的差。multiply(BigDecimal val): 返回两个BigDecimal对象的乘积。divide(BigDecimal val): 返回两个BigDecimal对象的商。max(BigDecimal val): 返回两个BigDecimal对象中的较大值。min(BigDecimal val): 返回两个BigDecimal对象中的较小值。
示例应用
- 示例(Example20.java)展示了如何创建
BigDecimal对象并执行基本运算。 - 包括加法、减法、乘法、除法和比较操作。
易错点
- 直接使用double构造函数可能会导致精度问题,建议使用字符串或
valueOf方法。 - 在除法运算中未指定精度和舍入模式可能导致
ArithmeticException。 - 对于商是无限循环小数的情况,如果不指定舍入模式,除法运算可能会抛出异常。
总结
BigDecimal类是进行高精度浮点数运算的理想选择,尤其适用于精度要求极高的场景。掌握其构造方法和常用运算方法对于实现精确的数学计算至关重要。同时,要注意在运算过程中正确处理精度和舍入模式以避免常见的错误。
我的理解:
1. 构造方法: BigDecimal(String val) 和 valueOf(double d)
- 用途: 创建
BigDecimal实例。 - 使用场景: 当需要高精度浮点数计算时。
- 技巧: 推荐使用字符串构造方法以避免由于double精度限制导致的错误。
- 错误点: 直接使用double构造函数可能会导致意外的精度问题。
2. add(BigDecimal val)
- 用途: 求和运算。
- 使用场景: 在进行高精度的加法运算时。
- 技巧: 确保参与运算的所有
BigDecimal对象都有适当的精度。 - 错误点: 忽视参与加法运算的
BigDecimal对象精度不一致可能导致的结果偏差。
3. subtract(BigDecimal val)
- 用途: 求差运算。
- 使用场景: 在进行高精度的减法运算时。
- 技巧: 同样要注意参与运算的
BigDecimal对象精度。 - 错误点: 与add类似,忽略精度问题可能导致结果不准确。
4. multiply(BigDecimal val)
- 用途: 乘法运算。
- 使用场景: 在进行高精度的乘法运算时。
- 技巧: 乘法可能导致结果精度增加,需要适当处理。
- 错误点: 忽略结果精度,导致计算结果超出预期精度范围。
5. divide(BigDecimal val)
- 用途: 除法运算。
- 使用场景: 在进行高精度的除法运算时。
- 技巧: 需要明确指定结果的精度和舍入模式,特别是当除不尽时。
- 错误点: 在除不尽的情况下未指定舍入模式,导致
ArithmeticException。
6. max(BigDecimal val) & min(BigDecimal val)
- 用途: 比较大小。
- 使用场景: 在需要比较两个
BigDecimal对象大小时。 - 技巧: 直接使用,适用于任何精度的
BigDecimal对象。 - 错误点: 没有特别的易错点。
总结
BigDecimal类在高精度浮点数运算中非常重要,但使用时需注意精度管理和舍入模式。特别是在进行除法运算时,正确处理舍入模式和精度设定是避免常见错误的关键。此外,理解BigDecimal的运算规则对于实现精确和有效的计算是至关重要的。

总结:
重点
- 精确浮点运算:
BigDecimal提供了一种在浮点数运算中保持高精度的方式,特别适用于需要精确计算的场景,如金融、商业计算。 - 任意精度: 可以表示任意精度的小数,解决了标准浮点类型(如 float 和 double)的精度丢失问题。
- 常用操作: 包括加法(
add)、减法(subtract)、乘法(multiply)、除法(divide)以及大小比较(max、min)。
难点
- 精度管理: 理解如何在运算中管理精度,尤其是在乘法和除法运算中。
- 舍入模式: 在除法运算中,正确选择和应用舍入模式,以处理无法整除的情况。
易错点
- 构造函数使用: 错误地使用 double 构造函数而不是字符串构造函数,可能导致初始精度损失。
- 除法精度问题: 在除法运算中未指定精度和舍入模式,导致运行时异常(
ArithmeticException)。 - 结果精度误解: 在进行连续计算时忽视了中间结果的精度可能发生变化,导致最终结果的精度不如预期。
总结
BigDecimal 是处理高精度浮点运算的强大工具,但要注意精度和舍入模式的正确管理。在使用时,应优先使用字符串构造方法以避免初始精度损失,特别注意在进行除法操作时的精度设置和舍入行为,以确保计算结果的准确性和预期一致。

本文介绍了Java中的BigInteger和BigDecimal类,用于处理大整数和高精度浮点数运算。重点讲解了这两个类的定义、应用场景、构造方法、常用运算及注意事项,强调了精度管理和舍入模式在高精度计算中的重要性。

1011

被折叠的 条评论
为什么被折叠?



