获取Java BigDecimal的尾数
我想用一些非常小和非常大的数字做一些简单的数学。我想从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): 这是我
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());