【问题标题】:Get the Mantissa of a Java BigDecimal获取 Java BigDecimal 的尾数
【发布时间】:2011-03-11 20:13:43
【问题描述】:

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

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

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

【问题讨论】:

  • 你不能循环将数字除以 10 吗?
  • 10 乘以 3 与 1 乘以 2 的“尾数”应该是多少?两者都表示 0.1,但 BigDecimal#unscaledValue() 对于通过 BigDecimal.valueOf(10, 3)BigDecimal.valueOf(1, 2) 构造的实例返回不同的结果。

标签: java math bigdecimal mantissa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 2010-11-21
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多