我试图做一个简单的操作,我将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;
}
}
答案 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
值。
因此,如果您输入2
,decimalPlaces
的值将为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());