在BigDecimal中提取数字十进制

时间:2012-04-30 12:03:49

标签: java bigdecimal

如何使用BigDecimal提取小数点后的数字?

  

BigDecimal d = BigDecimal.valueOf(1548.5649);

结果:仅提取:5649

6 个答案:

答案 0 :(得分:10)

尝试:

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

打印:

5649

答案 1 :(得分:6)

尝试BigDecimal.remainder

BigDecimal d = BigDecimal.valueOf(1548.5649); 
BigDecimal fraction = d.remainder(BigDecimal.ONE);
System.out.println(fraction);
// Outputs 0.5649

答案 2 :(得分:4)

这应该可以解决问题:

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

setScale()将数字四舍五入到零小数位,尽管名称不同,但不会改变d的值。

答案 3 :(得分:1)

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

使用此

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

返回56491548.5649

-1548.5649

答案 4 :(得分:0)

您不会告诉您想要哪种类型的结果。最简单的方法可能是将BigDecimal转换为String,并采用子字符串:

String s = d.toPlainString();
int i = s.indexOf('.');
if (i < 0) {
    return "";
}
return s.substring(i + 1);

答案 5 :(得分:-2)

尝试使用d.doubleValue()获取双倍值