x=new BigDecimal(x.toString()+" "+(new BigDecimal(10).pow(1200)).toString());
我试图将两个bigdecimal转换为字符串后连接它们,然后将它们转换回bigdecimal。我这样做是因为x有一个带小数点的值,相乘会改变它的值。它编译得很好,但在执行时抛出一个numberformat异常。
我的想法是使用BigDecimal("String x")构造函数将字符串转换回BigDecimal。
注意:(例如)x = 1333.212我把它转换成x = 1333.2120000
解析失败,因为您在那里没有特别的原因有一个空格。查看它试图解析的字符串,您将看到它不是一个有效的数字。
如果你只是试图添加额外的尾随零(你的问题非常不清楚),你应该改变比例:
x = x.setScale(x.scale() + 1200);
简单的例子:
BigDecimal x = new BigDecimal("123.45");
x = x.setScale(x.scale() + 5);
System.out.println(x); // 123.4500000
如果您试图将值乘以10的幂(正如您最初的问题所建议的),有一个更简单的方法,使用movePointRight
:
x = x.movePointRight(1200);
From the docs:
调用返回的
BigDecimal
值为(this
× 10n),尺度为max(this.scale()-n, 0)
。
你需要这样尝试
BigDecimal result=new
BigDecimal("1333.212123232432543534324243253563453423423242452543535")
.multiply(new BigDecimal("10").pow(1200));
System.out.println(result);
您的编辑:
BigDecimal result=new
BigDecimal("1333.212123232432543534324243253563453423423242452543535")
.multiply(new BigDecimal("10").pow(1200));
System.out.println(result.movePointRight(-1200));