在java中把BigDecimal转换为Float或Float转换为BigDecimal的教程(附实例)

973 阅读2分钟

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

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

Float用于存储32位浮点数字。

Bigdecimal to/from  Float in java with examples

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

如何在java中把bigdecimal转换为Float?

BigDecimal有一个方法floatValue ,用于返回浮点数。

它根据BigDecimal中数值的大小返回Float.NEGATIVE_INFINITY或Float.POSITIVE_INFINITY。

下面是一个语法

    public float floatValue()

下面是一个程序代码的例子

import java.math.BigDecimal;

public class BigDecimalTest {
    public static void main(String[] args) {
        BigDecimal order = new BigDecimal(789.124);
        System.out.println(order); //789.124000000000023646862246096134185791015625

        System.out.println(order.getClass()); // class java.lang.BigDecimal
        Float d = order.floatValue();
        System.out.println(d); //789.124
        System.out.println(d.getClass()); //class java.lang.Float

    }
}

输出:

789.124000000000023646862246096134185791015625
class java.math.BigDecimal
789.124
class java.lang.Float

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

本节向你展示了在java中把Float转换成BigDecimal的方法,我们可以通过两种方式来实现

  • BigDecimal构造函数。

    通过构造函数,你可以转换为字符串或双倍参数。 将浮点数转换为字符串并返回BigDecimal对象。 同样,由于浮点数会自动转换为双倍数,所以你可以向构造函数传递双倍参数

    public BigDecimal(String val)
    public BigDecimal(Double val)
    
    
  • valueOf方法:该静态方法接收Float值并返回BigDecimal对象。

        public static BigDecimal valueOf(double val) 
    

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

import java.math.BigDecimal;

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

        Float f = 467.123f;
        System.out.println(f); //467.123
        System.out.println(f.getClass()); //class java.lang.Float

        // using String constructor
        BigDecimal order = new BigDecimal(f.toString());
        System.out.println(order); //467.123
        System.out.println(order.getClass()); //class java.lang.BigDecimal

        // using double constructor
        BigDecimal order1 = new BigDecimal(f);
        System.out.println(order1); //467.12298583984375
        System.out.println(order1.getClass()); //class java.lang.BigDecimal

        // using valueOf method
        BigDecimal order2 = BigDecimal.valueOf(f);
        System.out.println(order2); //467.12298583984375
        System.out.println(order2.getClass()); //class java.lang.BigDecimal


    }
}

输出:

467.123
class java.lang.Float
467.123
class java.math.BigDecimal
467.12298583984375
class java.math.BigDecimal
467.12298583984375
class java.math.BigDecimal

在程序中,精度是一个长值,你可以用下面的值来限制精度或十进制值。

下面是一些步骤

  • 创建一个BigDecimal对象
  • DoubleMathContext 对象传递给构造函数 ``java public BigDecimal(double val, MathContext mc)
- `MathContext` takes a precision value which is of total digits before and after dot (.)operator and pass `RoundingMode.HALF_EVEN`

Here is an example code to convert float to bigdecimal with 3 decimal places.

```java
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;

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

        Float f = 467.123f;
        System.out.println(f); //467.123
        System.out.println(f.getClass()); //class java.lang.Float

        // using MathContext method to limit 2 decimal places
        BigDecimal order = new BigDecimal(f.floatValue(),
                new MathContext(6, RoundingMode.HALF_EVEN));
        System.out.println(order); //467.123
        System.out.println(order.getClass()); //class java.lang.BigDecimal


    }
}

摘要

学习了在java中将BigDecimal转换为Float的多种方法。 同时,将bigdecimal转换为Float的结果是增加了精度值,并试图避免货币的计算。