Я новичок в программировании. Я пытаюсь сохранить текст ввода в переменных с плавающей запятой, затем вычислить базовый процент и показать его ниже внутри метки. Вместо переменной внутри метки печатается NaN. Если я использую целые числа, это говорит о том, что я пытаюсь разделить на ноль, что говорит мне, что текст, прочитанный из записи, ничего не возвращает.
Что могло быть причиной этого?
public partial class GoalTrackerPage : ContentPage
{
float goal = 0.0000f;
float done = 0.0000f;
float progress = 0.0000f;
public GoalTrackerPage ()
{
InitializeComponent ();
g1EntryGoal = new Entry();
g1EntryDone = new Entry();
g1PrBar = new ProgressBar();
}
private void add1_Clicked(object sender, EventArgs e)
{
GoalStatusLabelView();
}
private void GoalStatusLabelView ()
{
progress = done / goal * 100.0000f;
g1StatusLabel.Text = "The Goal is at " + progress;
}
private void g1EntryGoal_Completed(object sender, EventArgs e)
{
goal = float.Parse(g1EntryGoal.Text ?? "0");
}
private void g1EntryDone_Completed(object sender, EventArgs e)
{
done = float.Parse(g1EntryDone.Text ?? "0");
}
вы нигде не назначаете свойство Text записей g1EntryGoal или g1EntryDone
Можете ли вы отладить и распечатать значение g1EntryGoal.Text в консоли?
Алекс, а как насчет: goal = float.Parse (g1EntryGoal.Text ?? "0");
Fahadsk, отладка выводит 0 для обеих строк, назначенных для записи. Текст после того, как я ввожу число и нажимаю Enter.





{
progress = done / goal * 100.0000f;
g1StatusLabel.Text = "The Goal is at " + progress;
}
Результат в основном просто ноль, и, поскольку он содержит двойное значение, он вернет NaN в g1StatusLabel.Text.
Возможно, это могло бы пролить немного больше информации о работе с результатом NaN.
Джасвиндер Сингх, почему он равен нулю, если я ввожу число в запись?
Хм, что происходит, когда вы отлаживаете g1EntryGoal.Text и цель? Какие данные вы в нем видите?
печатает [0:] для обеих записей.
Это означает, что с вашим захватом данных что-то не так, поскольку он печатает 0 вместо добавленного вами значения.
Я дважды проверил и трижды назначил свойство text. Даже используя больше варов, мне нужно просто убедиться. EntryGoal.Text по-прежнему равен 0 независимо от того, что я ввожу. Кстати, я назначил только цифровую клавиатуру для обеих записей.
Как мне правильно собирать данные из записи?
Я обычно использую класс объекта и / или уровень данных, но здесь перебор, у меня сейчас нет среды, чтобы отладить это, если я получу обновление, я опубликую его здесь.
Я понял! Поскольку я назначал свойство text внутри события «Text Completed», мне следовало использовать другой синтаксис. Правильный синтаксис для этого случая:
var g1DoneText = ((Entry) sender) .Text;
вместо стандартных: var g1DoneText = G1EntryDone.Text;
progress = done / goal * 100.0000f;думаю будетprogress = done / goal * 100.0000;