将PI小数点设置为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;
    }
}

几件事。

首先:下行在逻辑上是不正确的。读取的输出是int变量

中的char
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;
}

这应该解决您的例外,还要避免任何潜在的浮点精度问题

请修改您要从控制台读取值的行,

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

直接使用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));

最新更新