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();