【问题标题】:C# String multiplication errorC# 字符串乘法错误
【发布时间】:2013-08-13 17:59:42
【问题描述】:

我有一个 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!感谢帮助。你们都是救生员:)

【问题讨论】:

  • 这样想:“a”*“b”等于什么? “鲍勃”*“乔”? “四分”*“七年前”?

标签: c#


【解决方案1】:

您正在寻找numeric type,例如intdecimal。您需要 parse 来自输入的那些。

【讨论】:

    【解决方案2】:

    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 类型。

    【讨论】:

    【解决方案3】:

    您应该将两个字符串都转换为十进制,这样您就可以将它们多个并最终再次将它们转换为字符串。所以你可以使用 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) 来处理它,它返回一个布尔值,如果字符串是一个十进制值,它就会像十进制一样在 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);
    }
    

    对不起我的英语不好

    【讨论】:

    • 不要不解释就直接转储代码,尤其是当 OP 显然是初学者时。我们希望人们学习,而不是问和跑。
    • 但是,用户可能不会输入代表数字的字符串。不要忘记检查/处理这种可能性。
    • 不用担心 - 您可以编辑您的答案以改进它。请做! :)
    • 最有帮助的。谢谢您的帮助。 :)
    【解决方案4】:

    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 类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-28
      相关资源
      最近更新 更多