目前,我的程序可以正常运行-它可以执行问题的简单要求。但是,我的问题是:
1)我的程序打印pi至第n个数字,而不是pi至第n个小数-因此我通过使n = n + 2来解决此问题,因为如果n = 3(默认情况下)打印3.1,而不是3.141。
2)仅取值0 <= n <= 15
3)效率低下,并且缺乏我尚未发现的未知概念(我不知道要搜索什么)
package venture1
import java.util.Scanner;
import java.lang.Math;
import java.util.ArrayList;
public class pi {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
n += 2; //the problem
double pi = Math.PI;
String sting = Double.toString(pi);
char[] cA = sting.toCharArray();
String start = "3."; //to concatenate to loop values
String result = ""; //final print value
for (int i = 1; i < n; i++) {
char digit =cA[i];
if (i == 1) {
result = start;
}
else {
result += digit;
}
}
System.out.println(result);
scan.close();
}
}
[输入为3时,您的答案正确。(+ 2)似乎是最简单的解决方案。对于第二个问题,Math.PI具有17个字符。这是java Math方法中PI的精确值:3.141592653589793。因此,您输入的内容不能超过15。
根据java number format tutorial中包含的代码:
double pi = Math.PI; System.out.format("%.3f%n", pi); // --> "3.142"
如果要获得n位数字的相同结果= 3,请使用类DecimalFormat
,这取决于您检查n位的数字:
double pi = Math.PI;
int n = 3;
DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(n);
System.out.println(df.format(pi)); // --> "3.142"
使用BigDecimal。这也涵盖了您的+2问题。希望能帮助! :)
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
BigDecimal val22 = new BigDecimal(22);
BigDecimal val7 = new BigDecimal(7);
BigDecimal val = val22.divide(val7, n, RoundingMode.HALF_UP);
System.out.println(val.doubleValue());
}