Рейтинг:
6
Richard Deeming
Первая проблема: Вы используете целочисленное деление. Результаты будут усечены. Вам нужно использовать значения с плавающей запятой (double
) вместо целых чисел (int
).
Вторая проблема: В C#, ^
не поднимает одно число до степени другого; это оператор "исключительное или" :
^ Оператор (Ссылка На C#) | Microsoft Docs[^]
Вам нужно использовать математика.Функция Pow[^] вместо.
Третья задача: Convert.ToInteger
вызовет исключение, если входные данные не могут быть проанализированы как целое число. Если пользователь наберет "Бу!" в одном из ваших текстовых полей, ваш код рухнет.
Воспользуйся Двойной.Метод tryparse[^] чтобы попытаться проанализировать входные данные и сообщить об ошибке пользователю, если это не удастся.
if (!double.TryParse(txtSV.Text, out double sv))
{
... Report an error to the user ...
return;
}
if (!double.TryParse(txtFV.Text, out double fv))
{
... Report an error to the user ...
return;
}
if (!double.TryParse(txtNoY.Text, out double noY))
{
... Report an error to the user ...
return;
}
double x = fv / sv;
double y = 1D / noY;
double z = Math.Pow(x, y) - 1D;
double result = z * 100D;
txtResult.Text = result.ToString();
Prateek gsharma
Спасибо, речард.теперь я понял, что это работает.
Prateek gsharma
я хочу проверить txtSV.text, так как txtSV.Text не должен быть равен нулю .если txtSV ==0, то должно отображаться сообщение об ошибке
если (конвертировать.ToDouble(txtSV.Text) == 0)
{
Ящик для сообщений.Show("начальное значение должно быть больше 0.", "пожалуйста, исправьте эти ошибки", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка);
}
Richard Deeming
if (!double.TryParse(txtSV.Text, out double sv))
{
... Report an error to the user ...
return;
}
if (sv == 0D)
{
MessageBox.Show("Beginning value must be greater than 0.", "Please fix these errors", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Prateek gsharma
Привет сэр,
если я ввел отрицательное значение в любое текстовое поле, я не получаю никакого результата. просто забираю НЭН.
Prateek gsharma
частная txtFV_TextChanged недействительным(объект отправителя, EventArgs в электронной)
{
если (!двойной.Метод tryparse(txtFV.Текст, двойной ФВ))
{
вернуть;
}
если (fv >= 0D)
{
Ящик для сообщений.Show("конечное значение должно быть больше или равно 0.", "пожалуйста, исправьте эти ошибки", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка);
вернуть;
}
Richard Deeming
Вы показываете ошибку, если значение равно больше или равно ноль.
Основываясь на сообщении об ошибке, вы должны отображать ошибку, если значение равно меньше, чем ноль.
Prateek gsharma
тогда что же делать в этом случае.
Richard Deeming
Вы должны отображать ошибку, если это значение равно меньше, чем ноль.
if (fv < 0) { ... display error ... }
Prateek gsharma
если я введу отрицательные значения в txtFV.text, я должен получить предупреждение или ошибку, но я не получаю никакого сообщения об ошибке
Prateek gsharma
если SV больше FV, то я ничего не получаю, просто отображая "-".
может ли кто-нибудь решить эту проблему, сэр?
Richard Deeming
Это невозможно воспроизвести. Каковы точные значения, которые вы вводите, и каково значение result
когда вы отлаживаете свой код?
Prateek gsharma
любой vlaues, если мы введем SV > FV..... получаем результат как -(минус)
Prateek gsharma
я получаю символ минус в результате ввода SV = 21,FV = 20 NOY = 3
Richard Deeming
Если поместить эти значения в формулу, то получится result = -1.61318531938031
.
Если вы видите только символ минус, без каких-либо цифр, то ваш элемент управления недостаточно широк, чтобы отобразить результат.
Prateek gsharma
- спасибо, сэр.
Prateek gsharma
это нормально, но в то время как я ввожу 0.46 как SV & 0.59 как FV..... я получаю ошибку, как начальное значение должно быть больше нуля.... это неправильно, потому что я должен ввести 0.41 или 0.11 как SV & FV & я не должен получить никакой ошибки.можете ли вы plz помочь мне решить эту проблему?
Prateek gsharma
это нормально, но в то время как я ввожу 0.46 как SV & 0.59 как FV..... я получаю ошибку, как начальное значение должно быть больше нуля.... это неправильно, потому что я должен ввести 0.41 или 0.11 как SV & FV & я не должен получить никакой ошибки.можете ли вы plz помочь мне решить эту проблему?
Richard Deeming
Терпение-не ваша сильная сторона, не так ли? 🤦♂️
У вас есть ошибка в коде проверки. Вероятно, та же самая ошибка, которую вы совершили три недели назад - вы перепутали больше[^] оператор с помощью меньше, чем[^] оператор.
Исправьте код проверки таким образом, чтобы вы отображали ошибку, если значение равно меньше или равно[^] ноль.
Prateek gsharma
несмотря на то что я сделал так как вы сказали я получаю ту же ошибку
частная txtSV_TextChanged недействительным(объект отправителя, EventArgs в электронной)
{
если (!двойной.Метод tryparse(txtSV.Текст, двойной Св))
{
вернуть;
}
если (sv <= 0.00 D)
{
Ящик для сообщений.Show("начальное значение должно быть больше 0.", "пожалуйста, исправьте эти ошибки", MessageBoxButtons.Хорошо, MessageBoxIcon.Ошибка);
вернуть;
}
Richard Deeming
Либо сообщение об ошибке приходит откуда-то еще, либо вы не печатаете 0.46 в текстовом поле SV.
Отладьте свой код.
Prateek gsharma
я пытаюсь ввести 0.46, но SV textbox не позволяет мне войти, так как у меня есть проверка, как если бы(sv<=0).я думаю, что может быть какая-то другая проверка должна быть создана
Richard Deeming
Как я уже говорил, где-то в вашем коде вы перепутали меньше, чем и больше операторы.
Вам нужно отладить свой код.
Prateek gsharma
Отлажено, но все равно я не могу найти ошибку.не могли бы вы мне в этом помочь?
Richard Deeming
Я не могу отладить ваш код для вас. Только ты можешь это сделать.
Поставьте точку останова на каждой строке, которая отображает сообщение. Запустите свой код. Когда сообщение будет готово к отображению, отладчик прервется на этой строке. Изучите значения переменных и выясните, почему условие не выполняет то, что вы хотите. Тогда, чтобы исправить состояние.
Повторяйте, пока ваш код не заработает.