Java 避免使用BigDecimal的科学记数法
我有一个场景,输入的数据(字符串形式)可以用科学记数法表示,小数点后再加0。我试图将这个字符串转换为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
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。