Javaでは、BigDecimal
クラスを使用しているため、コードの一部で小数部分を抽出する必要があります。 BigDecimal
には、BigDecimal
の小数点以下の数値を取得するのに役立つ組み込みメソッドはないようです。
例えば:
BigDecimal bd = new BigDecimal("23452.4523434");
上記の数値から4523434
を抽出したい。それを行う最良の方法は何ですか?
値が負の場合、bd.subtract()
を使用すると間違った小数が返されます。
これを使用:
BigInteger decimal =
bd.remainder(BigDecimal.ONE).movePointRight(bd.scale()).abs().toBigInteger();
4523434
または23452.4523434
に対して-23452.4523434
を返します
さらに、小数部の右側に余分なゼロを追加したくない場合は、次を使用します。
bd = bd.stripTrailingZeros();
前のコードの前。
remainder()
メソッドを使用する代わりの方法を次に示します。
BigDecimal bd = new BigDecimal("23452.4523434");
BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger()));
さらに、abs()メソッドを試して、小数部が正であることを確認できます。
BigDecimal fracBd = bd.subtract(new BigDecimal(bd.toBigInteger())).abs();
負の「-23452.4523434」で数値を設定した場合でも、これは「4523434」を返します。
BigDecimal d = BigDecimal.valueOf(23452.4523434);
BigInteger decimal = d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();
うまくいきません!!!
_BigDecimal d = BigDecimal.valueOf(23452.4523434);
BigInteger decimal =
d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();
_
Exの場合、「0」で始まる小数部分を入力するとき。 「123.00456」。 「00456」の代わりに「456」が表示されます。 .toBigInteger()
に変換したために発生します。 最初のゼロがなくなった; .toString()
の代わりに.toBigInteger()
を使用すると、456.00000を取得します。 それも間違っています!
だから私のアドバイスは これを使用して:
_BigDecimal fractPart = bd.remainder(BigDecimal.ONE);
StringBuilder sb = new StringBuilder(fractPart.toString());
sb.delete(0, 2);
String str = sb.toString();
_
そして、このstr
を使用してください