如何在java中把BigDecimal转换为Double或Double转换为BigDecimal(附实例)

696 阅读2分钟

BigDecimal是一个具有任意精度的有符号十进制数字的大整数。

它包含一个32位的整数和一个未标定的十进制值。它被定义在java.math类中。它被用于产品价格和科学计算。

Double用于存储浮点数,使用64字节。

本教程告诉你如何在java中把BigDecimal转换为double。

注意:如果你使用货币值BigDecimal并将其转换为double,你将失去精度,并在货币处理中产生错误的结果。你也可以查看我以前关于java中BigInteger 类的文章。

如何将bigdecimal转换为double

BigDecimal有一个方法doubleValue ,用来返回双倍值。

它根据BigDecimal的值的大小,返回Double.NEGATIVE_INFINITY或Double.POSITIVE_INFINITY。

下面是一个语法 markup public doubleValue()


Here is an example program code

```java
import java.math.BigDecimal;

public class BigDecimalTest {
    public static void main(String[] args) {
        BigDecimal order = new BigDecimal(123.56789);
        System.out.println(order); //567890000000005557012627832591533660888671875
        System.out.println(order.getClass()); // class java.lang.BigDecimal
        Double d = order.doubleValue();
        System.out.println(d); //123.56789
        System.out.println(d.getClass()); //class java.lang.Double

    }
}

输出

123.567890000000005557012627832591533660888671875
class java.math.BigDecimal
123.56789
class java.lang.Double

如何在java中把double转换为BigDecimal?

本节向你展示了在java中把双数转换成大十进制的方法,我们可以通过两种方式来实现:

  • BigDecimal构造函数。该构造函数接受Double值并返回BigDecimal对象。

        public BigDecimal(double value) 
    
  • valueOf方法。这个静态方法接受双倍数的值,并返回BigDecimal对象。

        public static BigDecimal valueOf(double val) 
    

下面是一个完整的程序代码

import java.math.BigDecimal;

public class BigDecimalTest {
    public static void main(String[] args) {

        Double d = 123.56789;
        System.out.println(d); //123.56789
        System.out.println(d.getClass()); //class java.lang.Double


        // using constructor
        BigDecimal order = new BigDecimal(d);
        System.out.println(order); //123.67890000000005557012627832591533660888671875
        System.out.println(order.getClass()); //class java.lang.BigDecimal
        
        // using valueOf method
        BigDecimal order1 = BigDecimal.valueOf(d);
        System.out.println(order1); //123.56789
        System.out.println(order1.getClass()); //class java.lang.BigDecimal


    }
}

输出

123.56789
class java.lang.Double
123.567890000000005557012627832591533660888671875
class java.math.BigDecimal
123.56789
class java.math.BigDecimal

总结

学习了在java中把大十进制转换为双数的多种方法。另外,将bigdecimal转换为double会导致精确值的损失,在货币计算中要尽量避免。