Member 11819205 Ответов: 1

Как умножить количество двух меток в языке Си#


привет, значит, у меня есть 2 ярлыка. один из них является фиксированным числом и не меняется, но другой меняется каждые 5 секунд. Теперь я хочу автоматически умножить их и показать в другой метке в качестве результатов.

что же мне делать? Что я делаю не так?

Что я уже пробовал:

я попробовал этот код, но он говорит: "оператор * не может быть применен к строке и строке".

label1.Text = BTC_A.Text * BTCPrice_Label.Text;


тогда я попробовал

double txt1 = Convert.ToDouble(BTC_A.Text);
            double txt2 = Convert.ToDouble(BTCPrice_Label.Text);

            double sum = txt1 * txt2;

            label1.Text = sum.ToString();


но он говорит: "входная строка была не в правильном формате"

1 Ответов

Рейтинг:
9

OriginalGriff

Это невозможно.
Что вы получаете, когда умножаете "хлеб-это здорово" на "в бутерброде"?
Ничего - это глупая вещь, чтобы попытаться сделать.

Но фреймворк не знает, что пользователь собирается ввести - это может быть число, а может и нет. Таким образом, ваша вторая попытка лучше, но также ошибочна, потому что пользователи совершают ошибки.

Попробовать это:

double price;
if (!double.TryParse(BTCPrice_Label.Text, out price))
   {
   ... report problem to user ...
   return;
   }
double btcA;
if (!double.TryParse(BTCPrice_Label.Text, out btcA))
   {
   ... report problem to user ...
   return;
   }
label1.Text = (price * btcA).Tostring();

Таким образом, ваше приложение не будет аварийно завершать работу, когда возникает проблема!


Member 11819205

спасибо, что объяснили. я использовал этот код и теперь могу отлаживать свою программу, но она не показывает результатов!!

именно это я и сделал с кодом. я поставил // потому что у меня есть ошибки, и я не знаю, что мне с этим делать. ( я знаю, что это, вероятно, очень легко, но я все еще изучаю много основных вещей )

двойной АА;
если (!двойной.Метод tryparse(BTC_A.Текст, вне АА))
{
// ... сообщите о проблеме пользователю ...

вернуть;
}
двойной американский;
если (!двойной.Метод Tryparse(BTCPrice_Label.Текст, из американский))
{
// ... сообщите о проблеме пользователю ...
вернуть;
}
этикетка 1.Текст = (АА * американский).Метод toString();

OriginalGriff

Идея заключается в том, что вы заменяете закомментированную строку кодом, сообщающим о проблеме: Console.Возможно, WriteLine или Messagebox.Покажите, может быть, даже предупреждение о том, что вы кодируете веб - сайт - мы понятия не имеем, в какой среде вы работаете, поэтому я не могу быть конкретным о том, что там разместить-вот почему это было просто "... сообщите о проблеме пользователю...", чтобы вы поняли, что вам нужно что-то там сделать. Если вы просто прокомментируете его, он ничего не сделает!

Поставьте точку останова на двух операторах return и позвольте отладчику остановиться, когда он попадет в них - тогда вы сможете увидеть, что он обрабатывал.

Member 11819205

о, теперь я это понимаю. Огромное спасибо!.
Итак, я сделал то, что вы сказали, а также поставил две точки останова, но я не получаю никаких ошибок! он просто не умножает числа! и он продолжает показывать мне окна сообщений.

мое приложение находится в winforms ( https://imgur.com/U5nxs1J ).
этикетка 1.Текст-это метка результата, BTC_A.Текст-это метка "0.01741294" и BTCPrice_Label.Текст-это метка, которая меняется каждые 5 секунд и показывает цену btc
вот как это выглядит сейчас:

двойной АА;
если (!двойной.Метод tryparse(BTC_A.Текст, вне АА))
{
Ящик для сообщений.Показать("есть проблема");
вернуть;
}
двойной американский;
если (!двойной.Метод Tryparse(BTCPrice_Label.Текст, из американский))
{
Ящик для сообщений.Показать("есть проблема");
вернуть;
}
этикетка 1.Текст = (АА * американский).Метод toString();

OriginalGriff

Поэтому посмотрите, что именно содержится в значениях, прежде чем конвертировать их.
В какую точку останова он попал?
Какое значение было в строке?

Вы используете отладчик, да?

Также измените свое сообщение:

Ящик для сообщений.Show($"невозможно преобразовать BTC_A \"{BTC_A.Text}\" в число с плавающей запятой");

И

Ящик для сообщений.Show($"невозможно преобразовать цену \"{BTCPrice_Label.Текст}\" к числу с плавающей запятой");

Любая ошибка, которая просто говорит "это не работает", не имеет большого смысла без груды контекста!

Member 11819205

Огромное спасибо!. я обнаружил, что проблема была в знаке доллара, который я поставил перед номером, я просто удалил знак, и он показал результаты. Огромное спасибо!

OriginalGriff

Всегда пожалуйста!