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()将数字四舍五入到零小数位,尽管它的名字,不会改变 的值d

于 2012-04-30T12:09:40.270 回答
1

如果该值为负数,则 usingd.subtract(d.setScale(0, RoundingMode.FLOOR))将返回错误的小数。

使用这个

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

它返回56491548.5649-1548.5649

于 2015-06-10T15:43:31.437 回答
0

结果,您不知道您想要哪种类型。最简单的方法可能是将 BigDecimal 转换为字符串,并取一个子字符串:

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()来获得双倍值

于 2012-04-30T12:10:00.453 回答