从没有指数java的bigdecimal获取double值

时间:2016-05-14 17:02:17

标签: double bigdecimal exponential

有没有办法从BigDecimal获得双倍而没有指数?

例如:我有new BigDecimal("123456797676.897")

如果我打印new BigDecimal("123456797676.897").toString(),它会正确打印为123456797676.897

现在假设我尝试打印new BigDecimal("123456797676.897").doubleValue(),它会以1.23456797676897E11等指数打印。

有没有什么方法可以得到指数值的双值。

谢谢:)

1 个答案:

答案 0 :(得分:2)

以下程序演示了这两者完全相同:

new BigDecimal("123456797676.897").doubleValue()
123456797676.897
1.23456797676897E11
12.3456797676897E10

Double toString方法必须为每个值选择一个表示。对于大于10 7 的数字,它使用指数表示法,小数点前有一位数。这是一个普遍合理的选择,但并不总是正确的选择。如果您希望在没有指数的情况下显示它,请使用DecimalFormat。如果你只是使用这个数字,那么Double的#String是否会以指数显示它并没有区别,你也不需要做任何事情。

import java.math.BigDecimal;

public class Test {
  public static void main(String[] args) {
    double doubleValue = new BigDecimal("123456797676.897").doubleValue();
    double simpleLiteral = 123456797676.897;
    double exponent11Literal = 1.23456797676897E11;
    double exponent10Literal = 12.3456797676897E10;

    System.out.println(doubleValue == simpleLiteral);
    System.out.println(doubleValue == exponent11Literal);
    System.out.println(doubleValue == exponent10Literal);
  }
}

输出:

true
true
true