C#字符串乘法错误

时间:2013-08-13 17:59:42

标签: c#

我有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'类型的操作数和'字符串;"

有人可以向我解释有什么问题,为什么2个字符串不能成倍增加,并提供另一种让这条线路起作用的方法?

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

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

4 个答案:

答案 0 :(得分:6)

您正在寻找intdecimal之类的numeric type。您需要parse来自输入的内容。

答案 1 :(得分: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类型。

答案 2 :(得分: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);

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

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);
}

抱歉我的英文不好

答案 3 :(得分: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,具体取决于第一个参数是否可以成功解析为decimal类型的数据。如果解析成功,则使用out关键字修饰的第二个参数将包含生成的decimal值。

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