获取Java BigDecimal的尾数

获取Java BigDecimal的尾数,java,math,bigdecimal,mantissa,Java,Math,Bigdecimal,Mantissa,我想用一些非常小和非常大的数字做一些简单的数学。我想从BigDecimal开始: scala> java.math.BigDecimal.valueOf(54, 45) res0: java.math.BigDecimal = 5.4E-44 那么我如何得到尾数呢?54或5.4都可以。BigDecimal.unscaledValue(): 此方法的结果是一个BigInteger,因为BigDecimal具有任意长度的十进制精度 编辑 以下是我找到的另一种最干净的方法(5.4): 这是我

我想用一些非常小和非常大的数字做一些简单的数学。我想从BigDecimal开始:

scala> java.math.BigDecimal.valueOf(54, 45) 
res0: java.math.BigDecimal = 5.4E-44

那么我如何得到尾数呢?
54
5.4
都可以。

BigDecimal.unscaledValue()

此方法的结果是一个
BigInteger
,因为
BigDecimal
具有任意长度的十进制精度

编辑 以下是我找到的另一种最干净的方法(5.4):


这是我测试较少,但它应该涵盖所有情况。它对数字进行缩放,使其没有小数点(
bd.scale()
),但随后进行缩放,使小数点只剩下一个数字(
1-bd.precision()
)。

在循环中不能将数字除以10吗?对于10,尾数应该是3,而对于1,尾数应该是2?两者都表示0.1,但对于通过
BigDecimal.valueOf(10,3)
BigDecimal.valueOf(1,2)
构造的实例,
BigDecimal.unscaledValue()。
BigDecimal bd = BigDecimal.valueOf(54, 45);
System.out.println(bd.unscaledValue()); //prints "54"
  bd.scaleByPowerOfTen(bd.scale() + 1 - bd.precision());