为什么输出是科学记数法?

时间:2015-05-20 14:30:52

标签: java string decimal bigdecimal scientific-notation

为什么以下代码的输出采用科学记数法?

      BigDecimal val = new BigDecimal("0000.000000111");
      System.out.println(val);

输出: 1.11e-8

但此代码的输出以十进制格式正确。

      BigDecimal val = new BigDecimal("0000.000011111");
      System.out.println(val);

输出: 0.000011111

有没有办法为第一个字符串获取正确的十进制值(如第二个输出)?

2 个答案:

答案 0 :(得分:4)

如果查看the toString() function of BigDecimal,它会解释如何创建输出:

  

接下来,计算调整后的指数;这是否定的规模,   加上转换后的非标定值中的字符数,减去   一。也就是说,-scale +(ulength-1),其中ulength是长度   十进制数字中未缩放值的绝对值(其值   精度)。

     

如果比例大于或等于零且经过调整   指数大于或等于-6,该数字将被转换   不使用指数表示法的字符形式。在这种情况下,   如果比例为零,则不添加小数点,如果比例   为正数,将使用比例指定插入小数点   小数点右边的字符数。

如果您希望输出不带e10表示法,请使用toPlainString()

答案 1 :(得分:3)

使用toPlainString方法

BigDecimal val = new BigDecimal("0000.000011111");
          System.out.println(val.toPlainString());