首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将BigInteger转换为科学符号字符串并返回?

如何将BigInteger转换为科学符号字符串并返回?
EN

Stack Overflow用户
提问于 2016-07-22 20:03:30
回答 1查看 4.6K关注 0票数 1

我想把BigInteger数字转换成像1.86e+6这样的小科学符号,然后在Java中再次将这个科学符号转换成BigInteger数字。请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-22 20:46:42

最简单的方法是使用BigDecimal解析或输出科学符号字符串。

你可以这样做:

代码语言:javascript
复制
BigDecimal bd = new BigDecimal("1.86E+6");
BigInteger bi = bd.toBigInteger();

与之相反:

代码语言:javascript
复制
bd = new BigDecimal(bi);
String s = bd.toString();

更新

如果需要更多用户定义的输出,则可以使用NumberFormatter。不要忘记将Locale设置为类似于Locale.ROOT的内容,这样您就不会得到,比如一个逗号作为十进制分隔符(这就是我在德语语言环境中首先得到的)。示例:

代码语言:javascript
复制
    // Create a large, ugly number.
    BigInteger bi = BigInteger.valueOf(1001).pow(345);
    
    // Convert to scientific notation using invariant Locale.ROOT
    NumberFormat formatter = new DecimalFormat("0.######E0", DecimalFormatSymbols.getInstance(Locale.ROOT));
    String str = formatter.format(bi);
    
    System.out.println(bi);
    System.out.println();
    System.out.println(str);
    
    // No need for a formatter here.
    BigDecimal bd = new BigDecimal(str);
    BigInteger output = bd.toBigInteger();
    
    System.out.println();
    System.out.println(output);

这方面的产出如下:

代码语言:javascript
复制
1411746534642247386926682895653605505594156007645319584856454985824576909030651172402258145880680847831210464829918490010166811079002972726937057623073994129575640372154237767652434547101885830188958723868572869883365738143353635151476880747344348010706072986535185748982964423793694140085891791220972791882178323235649877119554541663599295787824745711388310165587991341807160511741076029768404282877856115942906536866189181255514197337418597936644390730217525723115231014147849887446040444969336884906158293521291748134217314005889949484320602720371789914893639795254884800520873191697159041280591046403928290350948505388703036712226506136642305960716764124836947362932720418554290195995002114233675196543233402547357577387336805972842986766416381431727078044233139876612983206051371851773391882427929601311695575660371227105236375213782469513349953017524299926322617324052803634576283153878896093739315873095260971811967828941219651149370566639839402498088185721432957408746669159107050035686712174548658001777149571278954599340345001

1.411747E1035

1411747000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

(是的,BigIntegers可能很难处理)。

我不知道你的价值观有多大,但在我的Mac电脑上,上面的效果很好。当然,只使用几个小数位的科学表示法就会失去很多精度。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38534460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档