`

BigDecimal类的简单用法 (转载)

    博客分类:
  • java
 
阅读更多

一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。BigDecimal类位于java.maths类包下。首先我们来看下如何构造一个BigDecimal对象。它的构造函数很多,我挑最常用的两个来演示一下:一个就是BigDecimal(double val),另一个就是BigDecimal(String str)。这两个看上去没什么太大区别,但是正像API描述中说的那样: 

 

  1. /*The results of this constructor can be somewhat unpredictable. One might assume that  
  2. new BigDecimal(.1) is exactly equal to .1, but it is actually equal  
  3. to .1000000000000000055511151231257827021181583404541015625. This is so because .1  
  4. cannot be represented exactly as a double (or, for that matter, as a binary fraction  
  5. of any finite length). Thus, the long value that is being passed in to the constructor  
  6. is not exactly equal to .1, appearances nonwithstanding. 
  7. The (String) constructor, on the other hand, is perfectly predictable: new BigDecimal 
  8. (".1") is exactly equal to .1, as one would expect. Therefore, it is generally  
  9. recommended that the (String) constructor be used in preference to this one.*/  

 

也就是说利用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用String对象作为参数传入的构造函数能精确的构造出一个BigDecimal对象。请看下面的代码:

  •     public static void main(String args[]){  
  •         BigDecimal bd = new BigDecimal("10.123");  
  •         BigDecimal bd1 = new BigDecimal(10.123);  
  •           
  •   
  •         System.out.println(bd +"/n"+ bd1);  
  •   
  •     }  
  • }  

     

     

     

    [java:nogutter]view plaincopyprint?
    1. import java.math.*;  
    2.   
    3. public class TestBigDecimal {  

     

    输出:

    •  
      •     public static void main(String args[]){  
      •         BigDecimal volumn = new BigDecimal("0");  
      •           
      •         for (int i=0; i<5;  i++){             
      •             volumn = volumn.add(new BigDecimal("1"));  
      •             volumn = volumn.divide(new BigDecimal("2"));  
      •         }  
      •           
      •         System.out.print(volumn);  
      •     }  
      • }  
        1. 结果:

           

          [java:nogutter]view plaincopyprint?
          1. 0.96875  
        1.  

          所以我们在选择构造函数时,要看具体需求而定。

          另外,很多人会问到怎么将基本类型,如int,float,double,long,和BigDecimal对象相互转换。很简单:

          基本类型通过构造函数转换成对应的BigDecimal对象,而BigDecimal类提供了诸如intValue(), floatValue(), doubleValue(), longValue()方法来将BigDecimal对象转换成对应的值。

          关于BigDecimal是如何计算的,我以论坛中一个人的提问帖子为例,来简单的写出BigDecimal的运算方法。题目是:李白无事街上走,提壶去买酒。遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒,试问李白壶中原有多少斗酒?

          这道题应该是从后往前推,并且要逆运算,最后得出原有酒的体积。

           

           

          [java:nogutter]view plaincopyprint?
          1. import java.math.*;  
          2.   
          3. public class Libai {  
        [java:nogutter]view plaincopyprint?
        1. 10.123  
        2. 10.1229999999999993320898283855058252811431884765625  
        分享到:
        评论

        相关推荐

          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()用于获取或设置小数位数等。在进行商业计算时,尤其是涉及...

          BigDecimal类

          BigDecimal 类详解 BigDecimal 类是 Java 中的一种数值类型,主要用于处理...它提供了多种构造器和方法,用于创建和操作 BigDecimal 对象,并且可以与 NumberFormat 类结合使用,用于格式化超过 16 位有效数字的数值。

          BigDecimal工具类.docx

          在BigDecimal工具类中,我们可以看到多个重载的方法,例如add方法和sub方法,这些方法可以根据不同的参数类型和精度需求进行选择。 首先,让我们来看一下add方法。add方法有三种重载形式,分别是add(double,double)...

          java-BigInteger-BigDecimal类源码

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

          Java中BigDecimal类的使用详解

          在使用BigDecimal类时,我们可以使用相应的方法来进行加法减法乘法除法运算: //加法 BigDecimal b1 = new BigDecimal(Double.toString(num)); BigDecimal b2 = new BigDecimal(Double.toString(num)); System.err....

          bigdecimal

          本文将深入探讨 `BigDecimal` 类的基本概念、特点以及如何使用它来进行精确的算术运算。 #### 一、基本概念 `BigDecimal` 类提供了一种可以进行任意精度定点数算术的方法。这意味着它可以存储一个数值的任意小数...

          BigDecimal使用

          下面是关于 BigDecimal 的使用方法和注意事项: 1. 导包:在使用 BigDecimal 之前,需要导入 java.math.BigDecimal 包。 2. 创建 BigDecimal 对象:可以通过多种方式创建 BigDecimal 对象,例如将 double 或 ...

          BigDecimal的用法

          详细的描述BigDecimal的用法,使你能很快对BigDecimal有较深的认识

          BigDecimal-CPP-master.zip

          4. 可能还包括文档,解释类的设计、使用方法和注意事项。 这个项目对于需要在C++中处理高精度计算的开发者来说非常有用,尤其是在金融软件、科学计算或者游戏开发中,这些场景往往要求结果的绝对精确。通过学习和...

          Java BigDecimal类用法详解

          - `BigDecimal(String val)`:推荐使用此构造方法,因为它能确保按照字符串提供的精确值来创建BigDecimal对象。 3. **加法操作**: `BigDecimal`的加法操作是通过`add()`方法实现的。在示例中,`a.add(b)`并没有...

          浅谈java中BigDecimal类的简单用法

          在Java编程语言中,`BigDecimal` 类位于 `java.math`...总的来说,`BigDecimal` 类是Java中处理高精度计算的重要工具,理解其构造函数和方法的用法,以及如何避免精度问题,对于编写准确的财务或科学计算程序至关重要。

          javascript版BigDecimal类库

          为了解决这个问题,开发者们引入了`BigDecimal`类库的概念,它在Java中被广泛使用,用于进行高精度的算术运算。本文将详细介绍JavaScript版的`BigDecimal`类库,以及如何在JavaScript环境中实现精确计算。 ...

          BigDecimal向Double转换

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

          BigDecimal的计算

          合理使用 `BigDecimal` 及其提供的各种方法,可以帮助我们避免因浮点数精度限制而产生的误差问题。此外,通过设置不同的舍入模式,还可以满足不同场景下的需求。在实际开发中,理解并熟练掌握 `BigDecimal` 的使用是...

          java中BigDecimal的操作方法

          在Java编程语言中,BigDecimal是用于处理高精度和可配置精度的十进制数的类。在进行商业计算时,由于浮点数(double和float)存在精度问题,不能保证准确的结果,因此通常推荐使用BigDecimal来确保计算的精确性。本文...

          BigDecimal.js.zip

          BigDecimal.js库的核心功能在于提供了大数运算的方法,如加法、减法、乘法、除法,以及比较、取模、平方根等操作。它还支持数字的格式化输出,可以自定义小数位数,以及进行科学计数法的转换。这些方法使得开发者在...

          java BigDecimal操作

          在进行大量计算时,为了性能考虑,可以使用`BigDecimal.valueOf()`静态工厂方法,它会复用已存在的BigDecimal实例,避免重复创建对象。 `MathContext`是另一个重要的概念,它定义了计算的精度和舍入模式。例如,`...

          BigInteger BigDecimal 使用

          在Java编程语言中,`BigInteger`和`BigDecimal`是两...在实际学习和使用时,可以查看这些源代码来理解这两个类的具体用法和应用场景。通过分析和调试代码,可以加深对大整数和高精度浮点数运算的理解,并提升编程技能。

          Java对BigDecimal常用方法的归类 -计算机等级考试-考试吧

          JAVA基础:java.math.BigDecimal的使用方法. JAVA基础:java.math.BigDecimal的使用方法.

        Global site tag (gtag.js) - Google Analytics