获取Java BigDecimal的尾数

时间:2011-03-11 20:13:43

标签: java math bigdecimal mantissa

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

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

我如何获得尾数? 545.4都可以。

1 个答案:

答案 0 :(得分:2)

BigDecimal.unscaledValue()

BigDecimal bd = BigDecimal.valueOf(54, 45);
System.out.println(bd.unscaledValue()); //prints "54"

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

修改

这是我找到的另一种最干净的方式(5.4):

  bd.scaleByPowerOfTen(bd.scale() + 1 - bd.precision());

我测试的次数较少但应该涵盖所有情况。它会缩放数字,使得没有小数部分(bd.scale()),但随后缩小,以便小数点(1 - bd.precision())只剩下一个数字。