`
xigua366
  • 浏览: 103085 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

BigDecimal类

    博客分类:
  • java
阅读更多
BigDecimal类
主要注意两点:
1、BigDecimal侧重于精度,对于精度有严格的要求和操作规范,这点也是它不同于Double、Float等而产生的原因。
2、DigDecimal中的除法操作  divide方法。(这个方法有很多重写方式,详见API文档)
代码理解第一点:(精度问题)
System.out.println(0.01 + 0.09);
System.out.println(0.05 + 0.01);
System.out.println(1 - 0.42);
System.out.println(4.015 * 100);
System.out.println(123.3 / 100);
猜猜以上输出结果是什么?
没错,结果如下:
0.09999999999999999
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
这就是java中的精度问题,虽然收不是所有的小数进行加减乘除操作都会出现这样乱七八糟的结果,但是只要这种精度问题的存在就迫使我们不能在商业软件中使用double或float进行加减乘除的操作,比如说第一条打印语句:A账户里有0.01元钱,别人转账给他0.09元钱,本来应该有0.10元钱的了,结果却不是。所以需要寻找一种解决这种精度问题的方法,它就是BigDecimal类。
用BigDecimal类重新来打印上面的计算如下:
System.out.println(new BigDecimal("0.01").add(new BigDecimal("0.09")));
System.out.println(new BigDecimal("0.05").add(new BigDecimal("0.01")));
System.out.println(new BigDecimal("1").subtract(new BigDecimal("0.42")));
System.out.println(new BigDecimal("4.015").multiply(new BigDecimal(100)));
System.out.println(new BigDecimal("123.3").divide(new BigDecimal("100"), 5, BigDecimal.ROUND_HALF_UP)); // 表示保留五位小数,并且四舍五入
输入结果如下:(这才是我们真正需要的值,特别是在商业软件算钱的程序中,对于数值的操作必须使用BigDecimal类)
0.10
0.06
0.58
401.500
1.23300

[b](特别注意前面创建BigDecimal类时是使用new BigDecimal(String str)构造器,这点很重要,若是直接new BigDecimal(0.05) 这样将dobule类型转为BigDecimal还是会存在精度问题的)[/b]

代码理解第二点:(除法操作)
除法操作主要注意点就是小数的保留和四舍五入的问题,如下代码将1除以3,真正结果是个无限循环小数
System.out.println(BigDecimal.valueOf(1).divide(BigDecimal.valueOf(3)));
运行结果报错,错误如下:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1514)
at demo01.Test.main(Test.java:22)
但进行了小数保留和四舍五入操作之后,会怎样呢?
System.out.println(BigDecimal.valueOf(1).divide(BigDecimal.valueOf(3), 2, BigDecimal.ROUND_HALF_UP));  // 表示保留两位小数,同时进行四舍五入操作
输出结果如下:
0.33
所以,在BigDecimal中除法操作中一定要记得设置保留小数位和四舍五入的操作,以防止不必要的错误。(BigDecimal.ROUND_HALF_UP中还有很多常量的,各表示不同的意思,ROUND_HALF_UP表示四舍五入操作,其它的见API文档)
3
1
分享到:
评论

相关推荐

    Java SE程序 BigDecimal类

    Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE程序 BigDecimal类Java SE...

    Java中BigDecimal类的简单用法

    在实际开发中,BigDecimal类提供了许多其他的方法,如add()用于加法,divide()用于除法,compare()用于比较两个BigDecimal对象的大小,scale()和precision()用于获取或设置小数位数等。在进行商业计算时,尤其是涉及...

    java-BigInteger-BigDecimal类源码

    在Java编程语言中,`BigInteger`和`BigDecimal`是两个重要的类,它们分别用于处理大整数和高精度浮点数。这两个类位于`java.math`包下,为开发者提供了超越基本数据类型(如int、long和double)的计算能力。在深入...

    Java中BigDecimal类的使用详解

    Java中BigDecimal类的使用详解 Java中BigDecimal类是Java.math包中提供的一个API类,用于对超过16位有效位的数进行精确的运算。由于浮点数的精度问题,Java中浮点数的计算会失去一定的精确度。因此,使用BigDecimal...

    bigdecimal

    ### Java中的BigDecimal类详解 在Java编程语言中,当我们处理涉及货币、财务或者任何需要高精度计算的场景时,`BigDecimal` 类是非常重要的工具之一。本文将深入探讨 `BigDecimal` 类的基本概念、特点以及如何使用...

    BigDecimal-CPP-master.zip

    标题中的"BigDecimal-CPP-master.zip"表明这是一个与BigDecimal类实现相关的C++项目压缩包。BigDecimal是一种可以处理任意精度的十进制浮点数的数据类型,它通常用于金融或会计等需要高精度计算的领域,因为在这些...

    BigDecimal的计算

    在Java中,`BigDecimal` 类提供了对超过16位有效数字的十进制数进行精确算术运算的能力。它适用于金融计算、科学计算等场景,在这些场景中,使用浮点数(如 `float` 和 `double`)可能会因为精度丢失而导致错误的...

    BigDecimal向Double转换

    最简单的方式是通过BigDecimal类提供的doubleValue()方法来实现转换。该方法会将BigDecimal对象中的值转换为Double类型。下面是一个简单的示例: ```java import java.math.BigDecimal; import javax.servlet....

    Java Math类、Random类、System类及BigDecimal类用法示例

    4. BigDecimal类是Java中处理大数运算的类,主要用于高精度计算,避免浮点数运算时的精度问题。BigDecimal类提供了许多构造函数和方法,如: - 构造函数:`new BigDecimal(String val)`,`new BigDecimal(double ...

    java BigDecimal操作

    在Java编程语言中,BigDecimal类是用于处理高精度、大范围浮点数的工具,它在需要精确计算的场景下非常关键。BigDecimal提供了避免浮点数运算中的精度损失的方法,适用于金融、会计等对精度有严格要求的领域。这篇...

    BigDecimal加减乘除计算

    BigDecimal 类在 Java 中被设计用来处理高精度的浮点数运算,主要应用于财务、金融等领域,因为这些场景中对精度要求非常高。BigDecimal 提供了加法(add())、减法(subtract())、乘法(multiply())和除法...

    BigDecimal工具类.docx

    BigDecimal工具类 BigDecimal工具类是Java中用于高精确处理常用数学运算的工具类。该工具类提供了多种精确的数学运算方法,包括加法、减法、乘法和除法等。 在BigDecimal工具类中,我们可以看到多个重载的方法,...

    将 BigDecimal 类型转换为 Integer 类型.pdf

    BigDecimal 类型是 Java 提供的一种用于精确算术运算的类,它支持任意大小的十进制数,并且能够避免浮点数计算时可能出现的舍入误差。然而,有时我们需要将这些大数转换为整数类型,如 Integer,以便于存储或者进行...

    Calculator:BigDecimal类的便捷包装器,允许计算运算忽略乘和除零的影响

    在Java编程语言中,BigDecimal类是用于表示精确的十进制浮点数的类,它提供了高精度的数学计算操作。然而,在进行算术运算时,如果遇到除以零的情况,程序通常会抛出ArithmeticException,这在某些场景下可能会导致...

    Java对BigDecimal常用方法的归类(加减乘除).doc

    Java 中的 BigDecimal 类提供了对浮点数的精确运算,包括加减乘除和四舍五入等操作。在 Java 中,简单类型不能够精确地对浮点数进行运算,因此需要使用 BigDecimal 类来提供精确的浮点数运算。 加法运算 在 Java ...

    Java BigDecimal类用法详解

    Java中的`BigDecimal`类是用来表示任意精度的十进制数,尤其适合于需要精确计算的商业和财务场景。它的核心概念包括非标度值(unscaled value)和标度(scale),非标度值是一个任意精度的整数,标度则是小数点后的...

    Java的数学运算处理类讲解代码(BigDecimal、Math、Random、DecimalFormat类全部操作方法API)

    理解BigDecimal类的使用,并了解如何处理大数精度计算和避免精度丢失。 掌握Math类提供的各种数学计算方法,如三角函数、指数运算等。 学习Random类的使用,包括生成随机数和调整范围。 理解DecimalFormat类的功能,...

    浅谈java中BigDecimal类的简单用法

    在Java编程语言中,`BigDecimal` 类位于 `java.math` 包中,是用于执行高精度和任意精度的十进制算术运算的关键类。它主要用于处理需要精确数值计算的场景,例如金融或会计领域,因为传统的 `float` 和 `double` ...

Global site tag (gtag.js) - Google Analytics