所以我有两个标签。其中一个是固定数字,不会改变,但另一个每5秒改变一次。现在我想自动将它们相乘,并将它们显示在另一个标签中作为结果。
我该怎么办?我做错了什么?
我试过这个代码,但上面写着";运算符*不能应用于字符串和字符串";。
label1.Text=BTC_A.Text*BTCPrice_Label.Text
然后我尝试了
double txt1=Convert.ToDouble(BTC_A.Text(;double txt2=转换为双精度(BTCPrice_Label.Text(;双和=txt1*txt2;label1.Text=总和。ToString((
但是它说";输入字符串的格式不正确";
逐步思考。
您有具有Text
属性的标签。该属性的类型为string
。C#是一种强类型语言:字符串不能像那样相乘。最后,标签可以是空的,或者用户可以输入任何随机字符串。"foo" * "bar"
的结果会是什么?
此外,当您确实有一个double
作为乘法运算的结果时,您希望在另一个label.Text
中向用户显示它。这里有一个相反的问题:C#/.Net不会将类型为double
的变量隐式转换为字符串。
所以你将不得不
- 检查用户输入的字符串是否真的是有效的双精度
- 如果是,请将这些字符串转换为
double
并相乘 - 将结果转换为字符串,并将其分配给labels
Text
属性 - 如果字符串不是有效的数字,请将标签留空,或显示其他消息
实现这一目标的逻辑如下:
var validPrice = int.TryParse(BTCPrice_Label.Text, out double price);
var validAmount = int.TryParse(BTCA_Label.Text, out double amount);
if (validPrice && validAmount)
{
var result = price * amount;
label1.Text = result.ToString();
}
else
{
label1.Text = "something is wrong";
}
所以问题是我在数字前面加了一个美元符号($(。
我刚刚删除了标志,这就是代码现在的样子:
double AA;
if (!double.TryParse(BTC_A.Text, out AA))
{
MessageBox.Show($"Unable to convert the BTC_A "{BTC_A.Text}" to a floating point number");
return;
}
double btcA;
if (!double.TryParse(BTCPrice_Label.Text, out btcA))
{
MessageBox.Show($"Unable to convert the price "{BTCPrice_Label.Text}" to a floating point number");
return;
}
label1.Text = (AA * btcA).ToString();