打印pi的n个十进制数字(Java)

问题描述 投票:-1回答:3

目前,我的程序可以正常运行-它可以执行问题的简单要求。但是,我的问题是:

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();
    }       
}

java arrays numbers pi
3个回答
0
投票

[输入为3时,您的答案正确。(+ 2)似乎是最简单的解决方案。对于第二个问题,Math.PI具有17个字符。这是java Math方法中PI的精确值:3.141592653589793。因此,您输入的内容不能超过15。


0
投票

根据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"

0
投票

使用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());
}
© www.soinside.com 2019 - 2024. All rights reserved.