我知道我可以使用Math.log(2)
生成它但是当我尝试编写自己的程序以生成2的自然日志时,它会连续打印1.这是我的代码:
import java.math.BigDecimal;
import java.util.Scanner;
public class Ques11 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
BigDecimal sum = new BigDecimal(1);
for(int i = 2; i <= n; i++) {
sum.add(new BigDecimal(1/n));
}
System.out.print(sum.setScale(10).toPlainString());
}
}
我尝试使用float
,double
和int
,最后使用BigDecimal
,但我仍然得到1,因此我不知道这是为什么。
P.S当给出大数字时,实际上会抛出InputMismatchException
,即大于2000000000
或2 Billion
。
答案 0 :(得分:1)
n
定义为int
,1
是int
字面值。当你划分两个int
时,你使用整数运算,这将只返回分数的整个部分 - 在你的情况下,0
。
要解决此问题,您应该使用double
s:
public class Ques11 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
double d = scan.nextInt(); // Note we're assigning to a double
BigDecimal sum = new BigDecimal(1);
for(int i = 2; i <= d; i++) {
sum.add(new BigDecimal(1.0/d));
}
System.out.print(sum.setScale(10).toPlainString());
}
}