我正在尝试执行一个简单的操作,其中我将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
。
因此,如果您输入2
,decimalPlaces
的值将为50
。
您需要做的是使用Console.ReadLine()
并在输入上执行int.TryParse()
,然后将其传递给您的Round()
方法。
string strNum = Console.ReadLine();
int decimalPlaces;
int.TryParse(strNum, out decimalPlaces);
Console.WriteLine(Round(decimalPlaces));