Db issues Ответов: 6

код для расчета процента в c#


Привет , я использую int32 имя переменной "count" и "totalcount", чтобы получить общее количество студентов для мальчиков и девочек. общее число найдено отлично,
я хочу также вычислить процентный возраст

count = ((count * 100) / totalcount);

он генерирует результирующее число, но я хочу, чтобы круглая цифра ie 29.8 отображалась как 29, это создает проблему при заполнении общего числа 100 %

koolprasadd

Хотите ли вы получить круглую стоимость ? система использования ".Математика.Круглый (//val));"

yesotaso

Распространенные Ошибки Программирования На Языке Си или вы можете сказать "с"...
двойной пятьдесят = (1/2) * 100;
Этот код устанавливает пятьдесят до 0, а не до 50! Почему? Из-за целочисленного деления.
Если вы хотите что-то прибить, используйте молоток, Если вы хотите что-то нарезать, используйте нож...

6 Ответов

Рейтинг:
52

Mehdi Gholam

Чтобы итоговые суммы сложились до 100, ваш лучший выбор-сохранить расчеты decimal нет int и отформатируйте десятичные дроби при отображении в вашем пользовательском интерфейсе, чтобы показывать только целые числа (format string = "0").


lukeer

+5 для использования десятичной системы счисления

Рейтинг:
2

pooja 08

процент должен быть рассчитан по приведенной ниже формуле

count = ((count / totalcount)*100);


Db issues

результат равен 0 в том случае, если я пробовал раньше,
теперь я объявил двойной процент = ((count * 100) / totalcount);
он отображает тот же результат, но как округлить фигуру и получить функцию пола / потолка

hiteshIT

Пожалуйста, попробуйте
int resultAmtPer = (int) (0.5 f + ((100f * definedPerAmt) / TotalAmt));
int avgPer = 100-resultAmtPer;

Anuja Pawar Indore

Это даст ответ, как ноль.
если (112/200)*100 приведет к нулю

GParkings

(число/totalcount командлета)*100 математически синонимом (число * 100) / totalcount командлета

pooja 08

ваша проблема решена или нет?

Db issues

да, логически нет никакой разницы, но я нашел ответ ноль, нет, моя проблема все еще существует

pooja 08

попробуйте объявить int как int32 я не уверен в этом но проверьте?

pooja 08

во время показа в пользовательском интерфейсе просто преобразуйте значение count в TOstring(); это решит вашу проблему

W∴ Balboos, GHB

ЛОГИЧЕСКИ ЕСТЬ ОГРОМНАЯ РАЗНИЦА !

Деление перед умножением на 100 будет (например) всегда давать ноль, если количество меньше общего количества. Умножение на 100 в этот момент-пустая трата времени.

Сначала вы умножаете, а затем делите, так что значение не всегда будет равно нулю.

Рейтинг:
1

BobJanova

Общее решение для обеспечения того, чтобы округленная коллекция чисел все еще складывалась так же, как и раньше, довольно сложно. Однако я думаю, что вы просто делаете два числа, так что одно из них на 100% минус другое:

int boys_pc = (int)(0.5f + ((100f * boys_count) / total_count));
int girls_pc = 100 - boys_pc;


Приведите к плаванию, чтобы избежать целочисленного деления, дающего вам ноль, и добавьте 0,5 для целочисленного округления. Используйте 0.5 f, а не 0.5, чтобы удержать его от расширения до double (что является излишним для чего-то, что в любом случае будет округлено до int).

Edit: Если вам все равно нужно умножить, просто умножьте на плавающую константу (например, 100f не 100), чтобы избежать целочисленного деления.


lukeer

Я думаю, что в ваших расчетах есть ошибка.
Подумайте о 80 мальчиках из 100 студентов.
Это будет коэффициент 0,8 (внутренние скобки). Добавление 0,5 F превысило бы 100%. Следовательно, процент девочек будет отрицательным.

BobJanova

Ах да, я забыл сначала умножить на 100. (ОП хочет 0-100, а не 0-1.) Спасибо.

[no name]

dhdhdhdh

Рейтинг:
1

Anuja Pawar Indore

Используйте Математику.Раунд (56.8) будет 57


Рейтинг:
1

N_tro_P

Вы можете использовать ToString для форматирования отображения так, как вы хотите.
Так что если у вас есть

double percent;
...
percent = 29.8;

...

public string PercentDisplay
{
    get{return percent.ToString("00")} //Will always show 2 digits and no decimal
}



Для сравнения, если вы всегда хотели 2 десятичных знака (даже если они равны 0), вы можете кодировать так percent.ToString("00.00")


Рейтинг:
0

nagendrathecoder

Воспользуйся

System.Math.Round()
метод.