我正在用Java做一个程序,看看Benford定律是否真的是真的。我正在使用BigDecimal,但是自从我实现它之后就出现了一个错误。
import java.lang.*;
import java.math.BigDecimal;
public class BenfordLaw {
public static int oneornot(BigDecimal number) {
String str2num = number.toString();
if(str2num.startsWith("1")) {
return 1;
} else {
return 0;
}
}
public static void main(String[] args) {
int n = 0;
long sum = 0;
for (int i = 0; i < 10000; i++) {
BigDecimal number = BigDecimal.valueOf(Math.pow(2,n));
System.out.println(number);
double newnum = oneornot(number);
sum += newnum;
n+=1;
}
System.out.println(sum);
System.out.println(sum*0.0001);
}
}如果您运行此程序,则会出现错误。错误在下面的链接中。https://pastebin.com/ShJmGjdJ
发布于 2017-08-12 23:47:32
您的程序会抛出异常,因为有以下行:
BigDecimal number = BigDecimal.valueOf(Math.pow(2,n));变量n在每次迭代时递增1,最多可达9999。由于Math.pow(2,n)变得如此之大,以至于在某一点上它超过了双类型的最大值。最终,Double.toString (由BigDecimal.valueOf使用)返回导致Double.toString的“无限性”
请将上述一行替换为以下内容以解决问题:
BigDecimal number = BigDecimal.valueOf(2).pow(n));https://stackoverflow.com/questions/45655649
复制相似问题