将PI小数位设置为用户给定的C#中的位数

时间:2017-08-30 21:48:24

标签: c#

我试图做一个简单的操作,我将PI的值显示给用户声明的十进制长度。例如,如果用户输入2,则PI将打印出3.14。但是,我一直收到ArgumentsOutOfBounds错误。谁能向我解释我做错了什么?

class PiToDecimalPlaces{
    public static void Main(){
        int decimalPlaces = (int)Console.Read();
        Console.WriteLine(Round(decimalPlaces));
    }
    public static double Round(int places){
        double piToPlaces = Math.Round(Math.PI, places);
        return piToPlaces;
    }
}

3 个答案:

答案 0 :(得分:2)

一些事情。

首先:以下行在逻辑上是不正确的。 Read返回的输出是char变量

中的int
int decimalPlaces = (int)Console.Read();

您需要的是

int decimalPlaces = int.Parse(Console.ReadLine());

第二:当您想要定点精度时,您的函数应该真正使用decimal而不是double,因为double是一个浮点精度值

public static decimal Round(int places){
    decimal piToPlaces = Math.Round((decimal)Math.PI, places);
    return piToPlaces;
}

这应该可以修复您的异常并避免任何潜在的浮点精度问题

答案 1 :(得分:0)

当您使用Console.Read()直接阅读时,您正在阅读ASCII输入的decimalPlaces值。

因此,如果您输入2decimalPlaces的值将为50

您需要做的是使用Console.ReadLine()并对输入执行int.TryParse(),然后将其传递给您的Round()方法。

string strNum = Console.ReadLine();
int decimalPlaces;
int.TryParse(strNum, out decimalPlaces);
Console.WriteLine(Round(decimalPlaces));

答案 2 :(得分:0)

请将您正在从控制台读取值的行修改为

int decimalPlaces = Convert.ToInt32(Console.ReadLine());