我正在创建一个程序,将大数字转换为字符串,然后添加该字符串的字符。它工作正常,我唯一的问题是,Java不是将它作为正常数字,而是将我的数字转换为标准形式,这使得解析字符串变得困难。这有什么解决方案吗?
public static void main(String ags[]) {
long nq = (long) Math.pow(2l, 1000l);
long result = 0;
String tempQuestion = Double.toString(nq);
System.out.println(tempQuestion);
String question = tempQuestion.substring(0, tempQuestion.length() - 2);
for (int count = 0; count < question.length(); count++) {
String stringResult = question.substring(count, count + 1);
result += Double.parseDouble(stringResult);
}
System.out.println(result);
答案 0 :(得分:1)
正如你所说:“NumberFormat”。上课。
答案 1 :(得分:1)
其他答案都是正确的,您可以使用java.text.NumberFormat
(JavaDoc)格式化输出。使用printf
也是格式化选项,类似于NumberFormat
。但我在这里看到别的东西。看起来您混淆了数据类型:
nq = (long) Math.pow(2l, 1000l);
您已经将Math的双返回值截断为long。然后,您应该使用long
作为数据类型而不是double
进行转换。所以使用Long.toString(long)
,这不会添加任何指数输出。
使用Long.toString(nq)
代替Double.toString(nq)
;在你的代码中。
答案 2 :(得分:1)
BigInteger易于使用,您不会冒使用它的精度问题。 (在这个特定的例子中,我不认为存在精度问题,因为Math.pow(2, 1001) % 100000
返回正确的最后5位数,但是对于更大的数字,最终会丢失信息。)以下是使用BigInteger的方法:
groovy:000> b = new BigInteger(2L)
===> 2
groovy:000> b = b.pow(1001)
===> 214301721437253464189685009812000362112280962341106721488750077674070210224
98722449863967576313917162551893458351062936503742905713846280871969155149397149
60786913554964846197084214921012474228375590836430609294996716388253479753511833
1087892154125829142392955373084335320859663305248773674411336138752
groovy:000> ((b + "").toList().collect {new Integer(it)}).inject(0) {sum, n -> sum + n}
===> 1319
Java中也是如此:
public class Example
{
public static void main(String[] args)
{
int sum = 0;
for (char ch : new java.math.BigInteger("2").pow(1001).toString().toCharArray()) {
sum += Character.digit(ch, 10);
}
System.out.println(sum);
}
}
答案 3 :(得分:0)
链接到NumberFormat的javadoc:Javadoc
答案 4 :(得分:0)
只需替换最后一行:
System.out.println(result);
与
System.out.printf("%d", result);