BigDecimalオブジェクトがあり、それを文字列に変換したいです。問題は、私の値が端数を取得し、(長さで)膨大な数を取得し、たとえば文字列の元の数だけが必要なことです:for
BigDecimal bd = new BigDecimal(10.0001)
System.out.println(bd.toString());
System.out.println(bd.toPlainString());
出力は:
10.000099999999999766941982670687139034271240234375
10.000099999999999766941982670687139034271240234375
そして、文字列の10.0001
と正確に一致する出力が必要です
正確に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コンストラクターを使用することはほとんど意味がありません。
詳細については、こちらを参照してください 小数点以下を二重に移動
BigDecimal
には番号10.0001
が含まれていません。これはdouble
で初期化したため、double
にはquiteには含まれていなかったためです。 (これはBigDecimal
の要点です。)
代わりに string-based constructor を使用する場合:
BigDecimal bd = new BigDecimal("10.0001");
...その後、実際に期待する数値が含まれます。
以下のメソッドを使用すると、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
さまざまなロケールをより適切にサポートするには、次の方法を使用します。
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(2);
df.setMinimumFractionDigits(0);
df.setGroupingUsed(false);
df.format(bigDecimal);
また、あなたはそれをカスタマイズすることができます:
DecimalFormat df = new DecimalFormat("###,###,###");
df.format(bigDecimal);
// 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);
正確な数量を設定して値を丸めるだけの場合、これを行う正しい方法は、このために独自のオブジェクトを使用することです。
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つは「カプセル化」です。この柱は、次のようにオブジェクトが自身の操作を処理する必要があることも示しています。
ダブルコンストラクターで必要な結果をアーカイブするには、BigDecimalをStringに変換する前に丸める必要があります。
new Java.math.BigDecimal(10.0001).round(new Java.math.MathContext(6、Java.math.RoundingMode.HALF_UP))。toString()
「10.0001」を印刷します
BigDecimalをdoubleにすることはできません。 Int番号を使用できます。正確に独自の数値を表示する場合は、BigDecimalのStringコンストラクターを使用できます。
このような:
BigDecimal bd1 = new BigDecimal("10.0001");
これで、bd1を10.0001として表示できます。
とても簡単。がんばろう。