50

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

4

4 回答 4

66
BigDecimal value = new BigDecimal(Float.toString(123.4f));

javadocs来看,字符串构造函数通常是将 afloat转换为 BigDecimal 的首选方法,因为它不受BigDecimal(double)构造函数的不可预测性的影响。

从文档中引用:

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

于 2010-09-30T08:43:43.920 回答
24
float f = 45.6f;
BigDecimal bd = BigDecimal.valueOf(f);

从文档中引用:

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

参考:BigDecimal(Java 平台 SE 6)

于 2013-06-27T16:40:49.147 回答
8

对于小数点后 3 位的精度:

BigDecimal value = new BigDecimal(f,
        new MathContext(3, RoundingMode.HALF_EVEN));
于 2010-09-30T09:36:07.720 回答
2

这是据我所知:

   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;
    }

}

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

公共静态 BigDecimal valueOf(double val)

参数
val - double 转换为 BigDecimal。
返回
一个 BigDecimal,其值等于或大约等于 val 的值。
抛出:
NumberFormatException - 如果 val 是无限的或 NaN。
自:
1.5

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

于 2017-10-10T13:32:02.877 回答