web-dev-qa-db-ja.com

BigDecimalから文字列

BigDecimalオブジェクトがあり、それを文字列に変換したいです。問題は、私の値が端数を取得し、(長さで)膨大な数を取得し、たとえば文字列の元の数だけが必要なことです:for

BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());

出力は:

10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375

そして、文字列の10.0001と正確に一致する出力が必要です

56
Yo Al

正確に10.0001を取得するには、StringコンストラクターまたはvalueOf(doubleの正規表現に基づいてBigDecimalを構築)を使用する必要があります。

BigDecimal bd = new BigDecimal("10.0001");
System.out.println(bd.toString()); // prints 10.0001
//or alternatively
BigDecimal bd = BigDecimal.valueOf(10.0001);
System.out.println(bd.toString()); // prints 10.0001

new BigDecimal(10.0001)の問題は、引数がdoubleであり、doubleが10.0001を正確に表現できないことです。したがって、10.0001は可能な限り最も近いdoubleに「変換」されます。これは10.000099999999999766941982670687139034271240234375であり、これがBigDecimalが示すものです。

そのため、doubleコンストラクターを使用することはほとんど意味がありません。

詳細については、こちらを参照してください 小数点以下を二重に移動

110
assylias

BigDecimalには番号10.0001が含まれていません。これはdoubleで初期化したため、doubleにはquiteには含まれていなかったためです。 (これはBigDecimalの要点です。)

代わりに string-based constructor を使用する場合:

BigDecimal bd = new BigDecimal("10.0001");

...その後、実際に期待する数値が含まれます。

11
T.J. Crowder

以下のメソッドを使用すると、Java.math.BigDecimalをStringに変換できます。

   BigDecimal bigDecimal = new BigDecimal("10.0001");
   String bigDecimalString = String.valueOf(bigDecimal.doubleValue());
   System.out.println("bigDecimal value in String: "+bigDecimalString);

出力:
stringのbigDecimal値: 10.0001

6
Saminathan

さまざまなロケールをより適切にサポートするには、次の方法を使用します。

DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(0);
df.setGroupingUsed(false);

df.format(bigDecimal);

また、あなたはそれをカスタマイズすることができます:

DecimalFormat df = new DecimalFormat("###,###,###");
df.format(bigDecimal);
3
Atetc
// Convert BigDecimal number To String by using below method //

public static String RemoveTrailingZeros(BigDecimal tempDecimal)
{
    tempDecimal = tempDecimal.stripTrailingZeros();
    String tempString = tempDecimal.toPlainString();
    return tempString;
}

// Recall RemoveTrailingZeros
BigDecimal output = new BigDecimal(0);
String str = RemoveTrailingZeros(output);
1
Rzgar

正確な数量を設定して値を丸めるだけの場合、これを行う正しい方法は、このために独自のオブジェクトを使用することです。

BigDecimal value = new BigDecimal("10.0001");
value = value.setScale(4, RoundingMode.HALF_UP);
System.out.println(value); //the return should be "10.0001"

Oriented Object Programming(OOP)の柱の1つは「カプセル化」です。この柱は、次のようにオブジェクトが自身の操作を処理する必要があることも示しています。

0
Sham Fiorin

ダブルコンストラクターで必要な結果をアーカイブするには、BigDecimalをStringに変換する前に丸める必要があります。

new Java.math.BigDecimal(10.0001).round(new Java.math.MathContext(6、Java.math.RoundingMode.HALF_UP))。toString()

「10.0001」を印刷します

0
foal

BigDecimalをdoubleにすることはできません。 Int番号を使用できます。正確に独自の数値を表示する場合は、BigDecimalのStringコンストラクターを使用できます。

このような:

BigDecimal bd1 = new BigDecimal("10.0001");

これで、bd1を10.0001として表示できます。

とても簡単。がんばろう。

0
Sajad