当前位置: 首页 > 面试题库 >

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

益楷
2023-03-14
问题内容

我想将BigInteger数转换为小的科学计数法,例如1.86e + 6,然后再次将该科学计数法转换为Java中的BigInteger数。请帮忙。


问题答案:

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

您可以执行以下操作:

BigDecimal bd = new BigDecimal("1.86E+6");
BigInteger bi = bd.toBigInteger();

并反向:

bd = new BigDecimal(bi);
String s = bd.toString();

更新资料

如果需要更多用户定义的输出,则可以使用NumberFormatter。不要忘记设置Locale喜欢的东西Locale.ROOT,所以你不会得到,说逗号作为小数点分隔符(这是我第一次了,在德语区域)。例:

    // 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);

输出为:

1411746534642247386926682895653605505594156007645319584856454985824576909030651172402258145880680847831210464829918490010166811079002972726937057623073994129575640372154237767652434547101885830188958723868572869883365738143353635151476880747344348010706072986535185748982964423793694140085891791220972791882178323235649877119554541663599295787824745711388310165587991341807160511741076029768404282877856115942906536866189181255514197337418597936644390730217525723115231014147849887446040444969336884906158293521291748134217314005889949484320602720371789914893639795254884800520873191697159041280591046403928290350948505388703036712226506136642305960716764124836947362932720418554290195995002114233675196543233402547357577387336805972842986766416381431727078044233139876612983206051371851773391882427929601311695575660371227105236375213782469513349953017524299926322617324052803634576283153878896093739315873095260971811967828941219651149370566639839402498088185721432957408746669159107050035686712174548658001777149571278954599340345001

1.411747E1035

1411747000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

(是的,BigIntegers可能很笨拙)。

我不知道您的价值有多大,但是以上这些在我的Mac上都能正常使用。当然,只用十进制数字表示的科学计数法会损失很多精度。



 类似资料:
  • 问题内容: 我正在尝试从标准输入中读取一些非常大的数字,并将它们加在一起。 但是,要添加到BigInteger,我需要使用: 效果很好,但是由于唯一需要加上,所以我不能添加大于的最大值(9223372036854775807)的数字。 每当我尝试添加9223372036854775808或更多时,都会得到NumberFormatException(这是完全可以预期的)。 有类似的东西吗? 问题答案

  • 问题内容: 为了转换字符串,我将其转换为字节,如下所示: 为了转换,我做了:显然不起作用。我将如何转换回去? 问题答案: 您原来的城市名称中有哪些字符?尝试这样的UTF-8版本:

  • 我需要将json字符串转换为java对象,并将其显示为long。json字符串是一个固定的长数字数组: 要转换的代码在所有情况下都可以正常工作,但以0结尾的数字除外。它将这些转换为科学符号数字格式: 实际结果:Java对象:268627104、485677888、5.068848E 8 请注意,最后一个数字已转换为科学记数法格式。有人能建议如何解决它、防止它或撤销它吗?我正在使用Gson v1.7

  • 问题内容: 我正在编写一个将数据存储在字典对象中的程序,但是该数据需要在程序执行过程中的某个时候保存,并在再次运行该程序时重新加载到字典对象中。我如何将字典对象转换为可以写入文件并再加载回字典对象的字符串?希望这将支持包含词典的词典。 问题答案: json模块是一个很好的解决方案。与pickle相比,它的优势在于它仅生成纯文本输出,并且是跨平台和跨版本的。

  • 很多问题都解决了这个问题,但没有一个解决方案能完全满足我的需要。 我有一个数据框,有两列数字,每列10-20位。这些实际上是ID,我想将它们连接起来。看起来最好先将值转换为字符串。 然而,当使用转换时,熊猫保留了科学符号,这是不会飞的。 我尝试过的事情: 尝试:dtype arg('str')或转换器(使用)在 结果:

  • 在我的例子中,其中一个xml标记值是"09031454866678e6"。而在中转换为json对象e被认为是科学符号,并转换为“9.031454866678E6”。 我应该如何避免这种转换并确保它被解析为字符串而不是数字? 在代码中: 其中resp是xml字符串。 设置值时失败 setobject方法如下所示 项目中使用的maven依赖项是 我期望输出与原始值“09031454866678e6”相