web-dev-qa-db-ja.com

JavaでfloatからbigDecimalに変換するには?

JavaでfloatからbigDecimalに変換するには?

36
akp
_BigDecimal value = new BigDecimal(Float.toString(123.4f));
_

javadocs から、BigDecimal(double)の予測不能性に悩まされないため、文字列コンストラクターはfloatをBigDecimalに変換するための一般的な方法です。コンストラクタ。

ドキュメントからの引用:

注:floatおよびdouble NaNおよび±Infinity以外の値の場合、このコンストラクターはFloat.toString(float)およびDouble.toString(double)によって返される値と互換性があります。 これは、BigDecimal(double)コンストラクターの予測不可能性の影響を受けないため、一般的にfloatまたはdoubleをBigDecimalに変換するための好ましい方法です。

43
dogbane
float f = 45.6f;
BigDecimal bd = BigDecimal.valueOf(f);

ドキュメントからの引用:

注:返される値はDouble.toString(double)を使用した結果からBigDecimalを構築した結果と等しいため、これは通常、double(またはfloat)をBigDecimalに変換する好ましい方法です。

リファレンス: BigDecimal(Java Platform SE 6)

20
Spacemonkey

小数点以下3桁の精度の場合:

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

これは私の知る限りです:

   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.toString(double)を使用した結果からBigDecimalを構築した結果と等しいため、これは通常、double(またはfloat)をBigDecimalに変換する推奨方法です。

public static BigDecimal valueOf(double val)

パラメーター
val-doubleをBigDecimalに変換します。
戻り値
値がvalの値と等しいかほぼ等しいBigDecimal。
スロー:
NumberFormatException-valが無限またはNaNの場合。
以降:
1.5

私は、InfiniteまたはNot a Numberをチェックしたので、NumberFormatExceptionの可能性が低くなりました。

1
Johnny Blaze