3

私のコードでは、丸めやべき乗なしでdbに挿入したいのですが、sopを2.631578947368421E-7として使用すると、Javaコードで変換されます。

以下は私が使用するコードです:

BigDecimal a =new BigDecimal(0.0000002631578947368421052631578947368421052632,MathContext.DECIMAL64);
System.out.println(a);

計算をしたいのでそのままにしておきたいです。

私に適切な解決策を提供してください。

4

3 に答える 3

8

文字列を使用して大小数を作成します。そうでない場合、入力した定数は、のコンストラクターに引数として渡される前に丸められますBigDecimal

したがって、次のように記述します。

BigDecimal a =new BigDecimal("0.0000002631578947368421052631578947368421052632");
System.out.println(a.toPlainString());

そして、すべてが機能するはずです。

static MathContext.DECIMAL64編集:あなたはまた、手段としてコンストラクターの2番目の引数を取り除く必要があります :A MathContext object with a precision setting matching the IEEE 754R Decimal64 format, 16 digits, and a rounding mode of HALF_EVEN, the IEEE 754R default.

EDIT2:a.toPlainString()科学的記数法を使用しないように印刷するときにも使用します。

于 2013-02-04T11:44:29.550 に答える
1

BIgDecimalが丸められます。

いいえ、そうではありません。BigDecimalそれとは何の関係もありません。定数値0.0000002631578947368421052631578947368421052632は丸められています。浮動小数点で正確に表すことはできません。この値で正確なBigDecimalが必要な場合は、次を使用してください。new BigDecimal(String).

于 2013-02-04T23:17:34.090 に答える
1

MathContext.UNLIMITEDを使用できます。

BigDecimal a =new BigDecimal(0.0000002631578947368421052631578947368421052632,MathContext.UNLIMITED);
System.out.println(a);
System.out.println(a.toPlainString());

値を出力する場合、 BigDecimal.toPlainString()を使用して、「指数フィールドのないこのBigDecimalの文字列表現」を返すことができます。

于 2013-02-04T11:48:06.787 に答える