Computer Wiz99 Ответов: 2

Как использовать тип данных float для расчета?


У меня есть расчет, который я пытаюсь сделать с типом данных float. Я никогда не делал этого раньше, используя float, поэтому я новичок в этом. Это код, который у меня есть до сих пор:

float c = float.Parse(TextBox1.Text.Replace(",", "").Replace(".", ""));
float d = float.Parse(TextBox2.Text.Replace(",", "").Replace(".", ""));
TextBox3.Text = (c-d).ToString();


Он делает расчеты для того, чтобы результат, который я получаю, был неправильным. Он имеет цифры и Буквы в текстовом поле 3.

Это то, что я пытаюсь вычислить для каждого текстового поля. Я делаю вычитание.

float c = float.Parse(TextBox1.Text.Replace(",", "").Replace(".", "")); //$46,534,798.18

float d = float.Parse(TextBox2.Text.Replace(",", "").Replace(".", "")); //$44,441,222.00

TextBox3.Text = (c-d).ToString(); //4.65348E+11


Пожалуйста, помогите мне!!

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

float c = float.Parse(TextBox1.Text.Replace(",", "").Replace(".", ""));
float d = float.Parse(TextBox2.Text.Replace(",", "").Replace(".", ""));
TextBox3.Text = (c-d).ToString();

Member 13566383

Покажите нам содержимое вашего текстового поля, значения ваших переменных c и d и результат, содержащийся в TextBox3.Text.
"Результат неверен" не является содержательным описанием ошибки.

Computer Wiz99

Извините за долгое ожидание и недостающие данные. Это вычисление вычитания.

поплавок с = поплавок.Синтаксический Анализ(Текстовое Поле Textbox1.Текст.Заменить(",", "").Заменить(""., "")); //$46,534,798.18

поплавок д = поплавок.Синтаксический Анализ(Поле Textbox2.Текст.Заменить(",", "").Заменить(""., "")); //$44,441,222.00

TextBox3.Text = (c-d).ToString(); //4.65348 E+11

Richard MacCutchan

Ваши текстовые значения включают знак $ , который приведет к сбою вызова синтаксического анализа.

Computer Wiz99

Я заменяю их и все равно получаю ту же проблему.
поплавок с = поплавок.Синтаксический Анализ(TextBoxTBS1.Текст.Заменить(",", "").Заменить (""., "").Заменить("$", ""));
поплавок д = поплавок.Синтаксический Анализ(TextBoxTBS2.Текст.Заменить(",", "").Заменить (""., "").Заменить("$", ""));

Richard MacCutchan

Прекратите делать все эти вызовы Relace, они не нужны. Используйте вызов подстроки, чтобы пропустить знак $ :

float.Parse(TextBoxTBS1.Substring(1));

Лучше все-таки использовать метод tryparse, как уже предложил Фил.о'ниже.
if (!float.TryParse(TextBoxTBS1.Substring(1), out c))
{
   // Handle here the case where a float value could not be properly parsed
}

Computer Wiz99

Поэтому я заменяю свой код на этот:

поплавок c, d;

если (!float.TryParse(TextBoxTBS1.Substring(1), out c))
{


}
если (!float.TryParse(TextBoxTBS2.Substring(1), out d))
{

}
но у меня есть ошибка с TextBox1.Substring(1). Я вижу под ним красную линию. Так где же происходит вычитание?

Richard MacCutchan

Извините, это была моя ошибка, Я забыл свойство Text. Так и должно быть:

if (!float.TryParse(TextBoxTBS1.Text.Substring(1), out c))

2 Ответов

Рейтинг:
4

Computer Wiz99

Вот что я сделал, и это сработало.

decimal c;
c = 0;
c = decimal.Parse(SELTOTAL1.GetValue(0).ToString());

decimal d;
d = 0;
d = decimal.Parse(SELTOTAL2.GetValue(0).ToString());

decimal x = c - d;
TextBoxTBS3.Text = x.ToString();


Richard MacCutchan

1. Не используйте Parse, используйте TryParse.
2. Почему вы преобразуете значение в строку только для того, чтобы преобразовать его обратно в значение?

Рейтинг:
0

phil.o

Вам не нужно/не следует обрезать десятичные и групповые разделители из строк, которые вы пытаетесь разобрать.
Вместо этого вы должны использовать Одиночный.Метод TryParse (Система) | Microsoft Docs[^] , особенно перегрузка, которая позволяет вам указать культуру:

float c, d;
NumberStyles styles = NumberStyles.Float | NumberStyles.AllowThousands;
if (!float.TryParse(TextBox1.Text, styles, CultureInfo.CurrentCulture, out c))
{
   // Handle here the case where a float value could not be properly parsed
}
if (!float.TryParse(TextBox2.Text, styles, CultureInfo.CurrentCulture, out d))
{
   // Handle here the case where a float value could not be properly parsed
}

Если вы удалите десятичный разделитель, есть большая вероятность, что значение, которое вы получите, будет неверным (например, 120.23 станет 12023).


0x01AA

Что это помогает использовать CultureInfo.CurrentCulture с сервера?

phil.o

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