如何在java中将float转换为bigDecimal?

问题描述 投票:0回答:4

如何在java中将float转换为bigDecimal?

java floating-point bigdecimal
4个回答
75
投票
BigDecimal value = new BigDecimal(Float.toString(123.4f));

javadocs 来看,字符串构造函数通常是将

float
转换为 BigDecimal 的首选方法,因为它不会受到
BigDecimal(double)
构造函数的不可预测性的影响。

引用文档:

注意:对于 float 和 double NaN 和 ±Infinity 以外的值,此构造函数与 Float.toString(float) 和 Double.toString(double) 返回的值兼容。 这通常是将 float 或 double 转换为 BigDecimal 的首选方法,因为它不会受到 BigDecimal(double) 构造函数的不可预测性的影响。


29
投票
float f = 45.6f;
BigDecimal bd = BigDecimal.valueOf(f);

引用文档:

注意:这通常是转换双精度数(或 float) 转换为 BigDecimal,因为返回的值等于该值 从使用结果构造 BigDecimal 得到的结果 Double.toString(双).

参考:BigDecimal(Java 平台 SE 6)


9
投票

小数点后 3 位精度:

BigDecimal value = new BigDecimal(f,
        new MathContext(3, RoundingMode.HALF_EVEN));

3
投票

据我所知:

   public static BigDecimal floatToBigDecimal(Float a){


    if(a == null || a.isInfinite() || a.isNaN()){
        return BigDecimal.ZERO;
    }
    try{
        return BigDecimal.valueOf(a);

    }catch(Exception e){
        return BigDecimal.ZERO;
    }

}

*注意:这通常是将 double(或 float)转换为 BigDecimal 的首选方法,因为返回的值等于使用 Double.toString(double) 的结果构造 BigDecimal 的结果。

公共静态 BigDecimal valueOf(double val)

参数
val - double 转换为 BigDecimal。
退货
一个 BigDecimal,其值等于或约等于 val 的值。
投掷:
NumberFormatException - 如果 val 为无限或 NaN。
自:
1.5

我已经检查了 Infinite 或 Not a Number,这样出现 NumberFormatException 的机会就更少了

© www.soinside.com 2019 - 2024. All rights reserved.