Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将BigInteger转换为科学符号字符串并返回?_Java_Biginteger_Notation - Fatal编程技术网

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

Java 如何将BigInteger转换为科学符号字符串并返回?,java,biginteger,notation,Java,Biginteger,Notation,我想将BigInteger数字转换成一个小的科学符号,如1.86e+6,然后在Java中再次将该科学符号转换成BigInteger数字。请提供帮助。最简单的方法是使用BigDecimal解析或输出科学符号字符串 您可以执行以下操作: BigDecimal bd = new BigDecimal("1.86E+6"); BigInteger bi = bd.toBigInteger(); 反过来说: bd = new BigDecimal(bi); String s = bd

我想将BigInteger数字转换成一个小的科学符号,如1.86e+6,然后在Java中再次将该科学符号转换成BigInteger数字。请提供帮助。

最简单的方法是使用
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
(是的,大整数可能很难处理)


我不知道你的价值观有多大,但上面这些在我的Mac电脑上运行得很好。当然,仅使用小数位数的科学记数法会损失很多精度。

请提供更多详细信息。什么是“小”科学符号?您想要像
1.86E+6这样的计算机样式输出,还是像1.86×10这样的印刷书籍符号⁶?  你对这门课熟悉吗?还是需要解释一下?显示您迄今为止所编写的代码的任何尝试都会很有帮助。@Shivansh您需要显示您已经尝试过的内容,以便人们可以帮助您修复代码。请阅读并提供@Shivansh:点击答案左侧数字上方的向上三角形,向上投票。你可以用问题来回答我使用的NumberFormat formatter=new DecimalFormat(“0.”E0);String str=formatter.format(mybiginteger);将BigInteger转换为科学记数法。但当我使用非常大的数字时,在将字符串重新转换为BigInteger时,在给出一些数字后,o/p中只显示零。请帮助。@Shivansh:抱歉,但我完全忘记了这一点。我更新了我的答案。请看一看。您的输出是否包含其他内容十进制分隔符,例如
“1863457E45”
而不是
“1.863457E45”“
?在我指定
Locale.Root
之前就发生了这种情况。这很好,先生。但是,有没有其他方法可以在不从很小的科学符号中得到零的情况下得到精确的原始数字呢?@Shivansh:没有。如果转换为只有几个数字的字符串,其余数字将丢失。否则,如果您可以从一个非常短的字符串中检索所有有效数字,您将找到最终的压缩技术。没有必要叫我“先生”,只要说“鲁迪”。