为什么以下代码的输出采用科学记数法?
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
有没有办法为第一个字符串获取正确的十进制值(如第二个输出)?
答案 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());