所以我只是试着开始编码一般而且我试图在C#中制作一个计算器并且它确实有效但我不能输入0.4问题或高于9个数字否则我的计算器给了我这个错误:值对于Int32来说太大或太小。
我搜索了问题并被引导到这个网站,这里的人们正在讨论使用字符串代替。我尝试过,但它告诉我,我不能使用 - 运算符或*运算符。
对不起,我甚至问这个问题有可能是一个非常简单的解决方案,但我希望有人能回答这个问题。
class Program
{
//Ints
public static int value1;
public static int value2;
public static int result;
public string input = Console.ReadLine();
static void Main(string[] args)
{
while (true)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine($"Choose your mathmetical operator: (A)dd (S)ubtract (M)ultiply");
if (Console.ReadLine() == "A")
{
Console.WriteLine("Enter 2 values.");
value1 = Convert.ToInt32(Console.ReadLine());
value2 = Convert.ToInt32(Console.ReadLine());
Add(value1, value2);
}
}
}
static void Add(int value1, int value2)
{
result = value1 + value2;
Console.WriteLine($"{result}");
Console.ReadLine();
Console.Clear();
result = 0;
value1 = 0;
value2 = 0;
}
static void Subtract(int value1, int value2)
{
result = value1 - value2;
Console.WriteLine($"{result}");
Console.ReadLine();
Console.Clear();
result = 0;
value1 = 0;
value2 = 0;
}
static void Multiply(int value1, int value2)
{
result = value1 * value2;
Console.WriteLine($"{result}");
Console.ReadLine();
Console.Clear();
result = 0;
value1 = 0;
value2 = 0;
}
}
}
答案 0 :(得分:2)
您的问题是您要将输入分配给Int32
,这是一个INTEGER编号,这意味着0.4
无效,整数也有这些限制:
Type Capacity
Int16 -- (-32,768 to +32,767)
Int32 -- (-2,147,483,648 to +2,147,483,647)
Int64 -- (-9,223,372,036,854,775,808 to +9,223,372,036,854,775,807)
取自this answer。
如果您想继续使用整数,可以考虑改用Int64
。否则你应该使用Double
。
编辑似乎decimal
更适合计算器。
答案 1 :(得分:2)
在分析了你的代码后,所有的逻辑似乎都没问题,但看起来你并不了解数据类型。这是你应该开始的,on this page你可以阅读有关C#的内置数据类型。
您应该知道的另一件事是如何更改(或转换)数据类型。在您的代码中,您希望该用户将遵循您的规则并正确输入所有内容。你必须将你的最终用户(甚至是你自己)视为一个完全愚蠢的人,它会在字段中插入"#6; ,特别是对于数字类型。将要求用户输入generic
输入类型的简单示例如下所示:
public static TResult AskForInput<TResult>(string message)
{
bool isValid = false;
while(!isValid)
{
Console.WriteLine(message);
string value = Console.ReadLine();
try
{
TResult result = (TResult)Convert.ChangeType(value, typeof(TResult));
return result;
}
catch
{
Console.WriteLine("Input does not match requested type");
}
}
}
最后但我想说最重要的是你希望用户输入带有预定义小数点(.
)的值,例如。 0.4
。此十进制标记取决于当前的文化信息,该信息在以下位置定义:
System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
。
因此,例如,您希望将此应用程序发送给不同国家/地区的朋友,并且在他们的文化中,他们使用逗号(,
)小数点。如果您想自己解析,那么您的应用程序可能会失败。请务必检查此设置或将其包含在转换方法中。
对于您的示例,我建议使用double
数据类型,因为它在数学运算中常用。将它与您的代码结合起来可能看起来有点类似:
public static void Main(string[] args)
{
//Your code goes here
//while (true)
{
Console.WriteLine("Choose your mathmetical operator: (A)dd (S)ubtract (M)ultiply");
if (Console.ReadLine() == "A")
{
Console.WriteLine("Enter 2 values.");
double value1 = AskForInput<double>("Enter left value :");
double value2 = AskForInput<double>("Enter right value :");
Add(value1, value2);
}
}
}
public static TResult AskForInput<TResult>(string message)
{
bool isValid = false;
TResult result = default(TResult);
while(!isValid)
{
Console.WriteLine(message);
string value = Console.ReadLine();
try
{
result = (TResult)Convert.ChangeType(value, typeof(TResult));
isValid = true;
}
catch(Exception ex)
{
Console.WriteLine("Input does not match requested type");
}
}
return result;
}
static void Add(double value1, double value2)
{
double result = value1 + value2;
Console.WriteLine(result);
}
static void Subtract(double value1, double value2)
{
double result = value1 - value2;
Console.WriteLine(result);
}
static void Multiply(double value1, double value2)
{
double result = value1 * value2;
Console.WriteLine(result);
}
答案 2 :(得分:1)
如前所述,您应该使用Int64,Double或甚至Decimal。除此之外,还有其他一些问题。也许这些可以成为学习点: