Java,只提取一个BigDecimal的小数部分?

在Java中,我正在使用BigDecimal类,部分代码要求我从中提取小数部分。 BigDecimal似乎没有任何内置的方法来帮助我获取BigDecimal的小数点后面的数字。

例如:

 BigDecimal bd = new BigDecimal("23452.4523434"); 

我想从上面表示的数字中提取4523434 。 什么是最好的办法呢?

我会尝试bd.remainder(BigDecimal.ONE)

使用remainder法和ONE常量。

 BigDecimal bd = new BigDecimal( "23452.4523434" ); BigDecimal fractionalPart = bd.remainder( BigDecimal.ONE ); // Result: 0.4523434 

这是使用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(); 

如果该值为负,使用bd.subtract()将返回一个错误的小数。

使用这个

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

它为23452.4523434-23452.4523434返回-23452.4523434


另外,如果你不想在小数部分的右边添加零,使用:

 bd = bd.stripTrailingZeros(); 

之前的代码。

即使您将负数设置为“-23452.4523434”,也会返回“4523434”。

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