Java 避免使用BigDecimal的科学记数法

Java 避免使用BigDecimal的科学记数法,java,bigdecimal,Java,Bigdecimal,我有一个场景,输入的数据(字符串形式)可以用科学记数法表示,小数点后再加0。我试图将这个字符串转换为BigDecimal对象,并消除科学记数法,丢弃小数点后多余的0。我在用这个电话: new BigDecimal(new BigDecimal(s).toPlainString()).stripTrailingZeros() 对于这些输入 "3438836.84782459" "10000000000.00000000" "1" "93650.99015461" "272333333.33000

我有一个场景,输入的数据(字符串形式)可以用科学记数法表示,小数点后再加0。我试图将这个字符串转换为
BigDecimal
对象,并消除科学记数法,丢弃小数点后多余的0。我在用这个电话:

new BigDecimal(new BigDecimal(s).toPlainString()).stripTrailingZeros()
对于这些输入

"3438836.84782459"
"10000000000.00000000"
"1"
"93650.99015461"
"272333333.33000000"
"0E-8"
"0E-8"
当我对结果
BigDecimal
对象执行
System.out.println
时,它输出:

3438836.84782459
1E+10
1
93650.99015461
272333333.33
0
0

关于如何消除科学记数法和额外的零有什么线索吗?

你创造了太多的大小数。您创建的第一个字符串被格式化为普通字符串,然后由于仅用作第二个BigDecimal的参数而丢失。然后打印第二个BigDecimal,而不转换为普通字符串。您需要做的只是:

String num = new BigDecimal(s).stripTrailingZeros().toPlainString();

上游需要一个BigDecimal对象,但不是string对象。@sandeep在BigDecimal中没有用于在科学符号和普通符号之间切换的状态。就这样结束了。BigDecimal只是一个值。只有将该值转换为字符串时,符号才起作用。因此,您需要做的是找到BigDecimal呈现为文本的位置,然后将
toString()
调用更改为
toPlainString()
调用。请注意,
toString()
调用可能是隐式的。因此,实际上,执行类似于
BigDecimal num=new-BigDecimal.stripTrailingZeros()的操作;System.out.println(num.toPlainString())
2723333.33000000
按预期工作。我看到的问题是
“1000000000.00000000”
首先
stripTrailingZeros()
,然后
toPlainString()
新的大十进制数。stripTrailingZeros().toPlainString()。无需将BigDecimal转换为字符串,然后再转换回BigDecimal。