8

BigDecimal を使用して小数点以下の数値を抽出する方法は?

BigDecimal d = BigDecimal.valueOf(1548.5649);

結果: 抽出のみ: 5649

4

6 に答える 6

12

試す:

BigDecimal d = BigDecimal.valueOf(1548.5649);
BigDecimal result = d.subtract(d.setScale(0, RoundingMode.FLOOR)).movePointRight(d.scale());      
System.out.println(result);

プリント:

5649
于 2012-04-30T12:16:36.880 に答える
6

BigDecimal.remainder を試してください:

BigDecimal d = BigDecimal.valueOf(1548.5649); 
BigDecimal fraction = d.remainder(BigDecimal.ONE);
System.out.println(fraction);
// Outputs 0.5649
于 2012-04-30T12:09:18.323 に答える
4

これでうまくいくはずです:

d.subtract(d.setScale(0, RoundingMode.FLOOR));

setScale()は数値を小数点以下 0 桁に丸め、その名前にもかかわらず、 の値を変更しませんd

于 2012-04-30T12:09:40.270 に答える
1

値が負の場合、 を使用d.subtract(d.setScale(0, RoundingMode.FLOOR))すると間違った 10 進数が返されます。

これを使用します

BigInteger decimal = 
                d.remainder(BigDecimal.ONE).movePointRight(d.scale()).abs().toBigInteger();

または_ 5649_1548.5649-1548.5649

于 2015-06-10T15:43:31.437 に答える
0

結果として、どのタイプが必要かはわかりません。最も簡単な方法は、おそらく BigDecimal を String に変換し、部分文字列を取得することです。

String s = d.toPlainString();
int i = s.indexOf('.');
if (i < 0) {
    return "";
}
return s.substring(i + 1);
于 2012-04-30T12:12:02.183 に答える
-3

d.doubleValue()double値を取得するために使用してみてください

于 2012-04-30T12:10:00.453 に答える