Substracting导致错误,我不知道如何解决它C#

时间:2017-02-22 15:34:13

标签: c#

对于我的学校作业,我必须做一个电影票务池,计算价格,折扣,税收等。 我需要显示总计,折扣,然后折扣后的总数。 我试图做总计 - 得到答案的折扣,但它不会让我和我的想法来解决这个错误。

以下是代码:

GroupLbl.Text = "Total discount: " + ((Kids * Price) * 0.75 + (Adults * Price) + (Seniors * Price) * 0.5) * 0.1;
DiscountLbl.Text = "Total after discount: " +TotalLbl.Text - GroupLbl.Text;
  

运算符' - '不能应用于'string'和'string'

类型的操作数

有谁知道这个问题?

非常感谢您的帮助!

6 个答案:

答案 0 :(得分:3)

问题是你试图减去字符串,这是不可能的,而不是你想要的。您的子操作必须使用正确的类型完成,在这种情况下可能是decimal。因此,您必须将字符串值解析为十进制,减去它们,然后将结果转换为字符串以显示它。你应该做这样的事情:

DiscountLbl.Text= "Total after discount: " 
                + (decimal.Parse(TotalLbl.Text) - decimal.Parse(GroupLbl.Text)).ToString();

修改

正如Steve和BviLLe_Kid指出的那样,由于输入来自用户并且可能包含错误的值,因此您必须使用TryParse而不是Parse。所以代码看起来像这样:

decimal total;
decimal group;

if (decimal.TryParse(TotalLbl.Text,out total) && decimal.TryParse(GroupLbl.Text,out group))
{
     string DiscountLbl = "Total after discount: " + (total-group).ToString();
}

答案 1 :(得分:1)

您需要在减法之前将字符串转换为int。 使用类似int x = Convert.ToInt32(theString)的内容。

答案 2 :(得分:1)

您必须将文字转换为双重

DiscountLabel.Text = "Total after discount:" + (Convert.ToDouble(TotalLbl.Text) - Convert.ToDouble(GroupLbl.Text)).ToString();

答案 3 :(得分:1)

你可以这样做:

//Since you are dealing with decimals:
string strResult = Convert.ToString(Convert.ToDouble(textBox1.Text) - Convert.ToDouble(textBox2.Text));

不要忘记将您的问题与您的代码一起正确发布,以便此处的人员可以轻松了解并为您提供帮助。有关详细信息,请参阅:https://stackoverflow.com/help/how-to-ask

答案 4 :(得分:1)

正如其他人所指出的那样,你需要先将字符串转换为整数才能减去。

另外,作为一般规则,请密切注意错误消息:

  

运算符' - '不能应用于'string'和'string'

类型的操作数

在这种情况下,问题正是编译器所说的:' - '不能应用于字符串。

请记住,某些操作仅对某些类型有意义。如果您尝试对字符串进行算术运算,请考虑一些边缘情况的示例:

  • “abc” - “c”(推测,这意味着“字符串差异”,其中 结果应该是“ab”)
  • “10”+“20”:这是不明确的,因为它可能意味着“1020” (字符串连接)或“30”(算术加法)。实际上,编译器将始终将其解释为连接,结果将为“1020”。
  • “abc” - “def”(如果这是字符串差异,结果应为“abc”)
  • “abc”*“def”:不知道这意味着什么。想想编译器如何解释它(它不能)。这确实应该是一个编译错误,但是编译器如何“知道”它应该是一般情况并不明显。

正如您所看到的,当您尝试对字符串执行算术运算时,编译器没有通用的方法来确定您打算做什么。特别是在这种情况下,对以自动方式推理程序的能力存在严格限制(例如,参见halting problem)。

还有一件事 - 看看GroupLbl.Text

的价值
GroupLbl.Text = "Total discount: " + ((Kids * Price) * 0.75 + (Adults * Price) + (Seniors * Price) * 0.5) * 0.1;

这就像“总折扣:10.0”。 “10.0” - “总折扣:10.0”是什么意思?最好将总折扣存储在单独的双倍或十进制变量中。

double discount = ((Kids * Price) * 0.75 + (Adults * Price) + (Seniors * Price) * 0.5) * 0.1;
GroupLbl.Text = "Total discount: " + discount.ToString();
double totalAfterDiscount = double.Parse(TotalLbl.Text) - discount;
DiscountLbl.Text = "Total after discount: " + totalAfterDiscount.ToString();

答案 5 :(得分:0)

您正在尝试减去两个包含文本的标签控件(其中一些是数字,我从图像中获取的是您想要的)。你不能这样做。

提供除图像之外的代码。