Prateek gsharma Ответов: 1

Я создаю калькулятор в среднем, но я не получаю результат.может ли один помочь мне?


Формула среднегодовой темп роста равен : ((конечное значение/начальное значение)^(1/нет.из-летки)) минус 1


но всегда я получаю результат как 0.

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

использование системы;
использование системы.Коллекции.Общий;
использование системы.ComponentModel;
использование System.Data;
использование системы.Рисование;
использование System.Linq;
использование System.Text;
использование системы.Нарезание резьбы.Задачи;
использование системы.Окна.Формы;

пространство имен CAGRcalc
{
общественности частичного класс form1 : форма
{
инт СВ, ФВ Ной Х,У,Z;
Двойной Результат;
частный недействительными методе button2_click(объект отправителя, EventArgs в электронной)
{
SV = конвертировать.ToInt32(txtSV.Text);
FV = преобразование.ToInt32(txtFV.Text);
NoY = Конвертировать.ToInt32(txtNoY.Text);

X = Преобразовать.ToInt32(FV / SV);
Y = Преобразовать.ToInt32(1 / NoY);


Z = ((X) ^ Y) - (1);

Результат = Преобразование.ToDouble(Z * (100));

txtResult.Текст = Результат.Метод toString();
}

открытый form1()
{
метод InitializeComponent();
}
}
}

1 Ответов

Рейтинг:
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

Я не могу отладить ваш код для вас. Только ты можешь это сделать.

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

Повторяйте, пока ваш код не заработает.