运算符' - '不能应用于'float'和'string'类型的操作数

时间:2014-07-31 02:00:30

标签: c#

我正在创建一个小程序,要求用户输入一些关于他们自己的信息,然后输入他们完成了多少小时的工作,然后计算他们的总工资,净工资和税后工资。我不是100%熟悉c#中的所有术语,但希望有人可以指导我朝正确的方向发展,我也想知道是否有任何方法可以缩短代码,使其看起来更干净,更容易阅读以及如何使它在数字后面只有2位小数。

这只是我收到错误的代码的一小部分。 所有这些都是花车

hrsworked:用户输入他们工作了多少小时 税:预定值为35.72%
prate:只需支付每小时31.31美元的费用

  Console.WriteLine("\nGross Pay            " + (hrsworked * prate).ToString("c"));
  Console.WriteLine("Tax                    " + ((hrsworked * prate) * (tax / 100)).ToString("c"));
  Console.WriteLine("Net Pay                " + ((hrsworked * prate) - ((hrsworked * prate) * (tax / 100)).ToString("c")));

3 个答案:

答案 0 :(得分:4)

您的代码中存在一些拼写错误。花点时间仔细检查一下你正在做什么。

以此行为例,这会导致标题出错:

((hrsworked * prate) - ((hrsworked * prate) * (tax / 100)).ToString("c")));

以下是括号的分组方式:

(
    (hrsworked * prate)
    -
    ((hrsworked * prate) * (tax / 100)).ToString("c")
)

您尝试从数字中减去字符串。您需要调整括号:

... ((hrsworked * prate) - ((hrsworked * prate) * (tax / 100))).ToString("c"));

对于"清洁工",我绝对遵循Blorgbeard的建议并将其打破。例如:

var grossPay = hrsworked * prate;
var taxPercentage = tax / 100;

... + grossPay.ToString("c"));
... + (grossPay * taxPercentage).ToString("c"));
... + (grossPay - (grossPay * taxPercentage)).ToString("c")));

(由于操作顺序,你不需要上面最后一行的最里面的括号,但我认为它使它更具可读性.YMMV)

答案 1 :(得分:1)

        Console.WriteLine("Please enter hours.");
        var hoursWorked = Convert.ToDouble(Console.ReadLine());

        Console.WriteLine("Please enter pay rate");
        var payRate = Convert.ToDouble(Console.ReadLine());

        Console.WriteLine("Please enter tax.");
        var tax = Convert.ToDouble(Console.ReadLine());

        var grossPay=(hoursWorked * payRate);
        var taxAmount = (grossPay * (tax / 100));
        var netPay = grossPay - taxAmount;

        Console.WriteLine(string.Format("Gross Pay {0}",grossPay.ToString("c")));
        Console.WriteLine(string.Format("Tax {0}", taxAmount.ToString("c")));
        Console.WriteLine(string.Format("Net Pay {0}", netPay.ToString("c")));

答案 2 :(得分:0)

错误在于代码的这一部分:

(hrsworked * prate) - ((hrsworked * prate) * (tax / 100)).ToString("c"))

您尝试从((hrsworked * prate) * (tax / 100)).ToString("c")

中减去字符串(hrsworked * prate)

您可以尝试在http://www.dotnetperls.com/中阅读有关C#的内容。我发现这些例子很容易理解。