1

我有一个 TAFE 的任务,我必须在 Visual Studio 中创建一个控制台程序,该程序根据咨询时间(每小时 25 美元)计算咨询成本。

string hours, rate, total;
Console.Write("Enter consultation time in hours");
hours = Console.ReadLine();
rate = ;
total = hours * rate;
Console.WriteLine("Fee is " + total);

我的问题在第 5 行,我收到错误“运算符'*'不能应用于'string'和'string'类型的操作数;”

有人可以向我解释什么是错的,为什么不能将 2 个字符串相乘并提供另一种让该行工作的方法?

编辑:谢谢大家。提供的所有信息都很有帮助。我已经完成了它,将速率保留为整数,因为它的设定值不会被用户输入更改,小时数和总数仍然是字符串,小时数通过 convert.ToDecimal 线 GianlucaBobbio 给我转换为十进制。现在唯一的问题是控制台在计算速率 * 小时后不会保持打开状态,但我可以解决这个问题。

您可能只有一个新的普通用户:D!感谢帮助。你们都是救生员:)

4

4 回答 4

6

您正在寻找类似or的数字类型。您需要从输入中解析这些内容。intdecimal

于 2013-08-13T18:00:49.987 回答
3

Console.ReadLine()如此自然地返回一个字符串,您不能将字符串与数字相乘。您必须将字符串解析为 double/int/float/decimal(无论是哪种情况),然后进行乘法运算。

一个例子是:

double hours = 0.0;
if(double.TryParse(Console.ReadLine(),out hours))
{
   total = (decimal)hours * rate; 
   Console.WriteLine("Fee is " + total);
}
else 
   Console.WriteLine("You did not enter a valid number of hours.");

由于这是一个关于金钱的计算,你的ratetotal变量应该是类型decimal

于 2013-08-13T18:01:55.617 回答
2

您应该将两个字符串都转换为十进制,这样您就可以将它们多个并最终再次将它们转换为字符串。所以你可以使用 de Convert 方法。

string hours, rate, total;
Console.Write("Enter consultation time in hours");
hours = Console.ReadLine();
rate = ;
total = Convert.ToString(Convert.ToDecimal(hours) * Convert.ToDecimal(rate));
Console.WriteLine("Fee is " + total);

要处理他是否输入了有效数字,您可以使用返回 bool 值的 decimal.TryParse(string, decimal),如果字符串是十进制值,它将位于 out 变量中,如十进制

string hours, rate, total;
Console.Write("Enter consultation time in hours");
hours = Console.ReadLine();
rate = ;
decimal hourInput = 0;
if(!decimal.TryParse(hours, out hourInput)
{
    Console.Write("Thats not a number!");
}
else
{
    total = Convert.ToString(hourInput * Convert.ToDecimal(rate));
    Console.WriteLine("Fee is " + total);
}

对不起,我的英语不好

于 2013-08-13T18:03:39.653 回答
1

C# 的类型系统不允许大量推断;例如,与 JavaScript 或 Ruby 不同的是,当您尝试对字符串执行算术运算时,它不会将字符串隐式转换为数字类型。相反,您必须将用户的输入从 String 显式转换为某种数字类型。这是一种方法:

string hours;
decimal numericHours, rate, total;

Console.Write("Enter consultation time in hours");
hours = Console.ReadLine();
if (!Decimal.TryParse(hours, out numericHours))
{
    Console.WriteLine(String.Format("{0} doesn't appear to be a valid number of hours. Please enter a numeric value.", hours));
}
else
{
    rate = 35.6;
    total = numericHours * rate;
    Console.WriteLine("Fee is " + total);
}

if声明值得进一步解释:Decimal.TryParse()是 .NET 框架中罕见的方法之一,它具有两种效果:它返回 true 或 false,具体取决于第一个参数是否可以成功解析为 type 的数据decimal。如果解析成功,则用关键字修饰的第二个参数out将包含结果值。decimal

一些额外的 .NET 提示:注意使用String.Format()来控制将变量插入字符串 - 我发现它比+字符串连接运算符更好用。此外,正如其他答案所指出的那样,由于不同的二进制表示,算术在double和类型上的执行方式有所不同。decimal在处理精确的小数值时,尤其是货币,更喜欢这种decimal类型。

于 2013-08-13T18:08:50.327 回答