Вопрос:
Как рассчитать несколько процентов от int?
например, я хочу получить 30% от числа, если я буду использовать этот пример кода, я получу неправильный ответ:
int number = 250; int result = (number / 100) * 30;
результат будет 60, а реальный ответ 75, есть ли способ его вычисления?
Лучший ответ:
Умножьте перед делением:
int result = number * 30 / 100;
Причина, по которой вы получаете результат, состоит в том, что деление с целыми типами дает целочисленный результат: 250/100 равно 2. Если вы умножаетесь до деления, вы по-прежнему получаете целочисленный результат, но по крайней мере вы не потеряли данные в промежуточные этапы. Если вам приходится иметь дело с действительно огромными числами, существует опасность переполнения диапазона, разрешенного int.
В качестве альтернативы вы можете использовать арифметику с плавающей запятой, где деление может производить дроби целых чисел:
int result = number * 0.30;
Это может привести к неожиданным результатам, поэтому вам лучше использовать целые числа, как указано выше. Или напишите 3.0/10 вместо 0.30.
Ответ №1
Предполагая, что числа малы (ish), вы можете просто повернуть его:
int result = (number * 30) / 100;
(Скобка не требуется, но помогает уточнить).
Это не будет работать, если любое из чисел несколько миллионов, но должно быть хорошо для чисел, меньших этого.
Ответ №2
Переключение операндов (как предложили другие) тоже будет работать, но на всякий случай, если вы этого не хотите, есть другое решение:
int number = 250; int result = static_cast<double>(number) / 100 * 30; Ответ №3
Попробуйте это,
int number = 250; float result = number * (float)(30/100.0); Ответ №4
Вам нужно выполнить математику с плавающей запятой, иначе компилятор выполнит всю арифметику здесь как целые числа.
Вы можете попробовать
int result = (number / 100.0) * 30; Ответ №5
Использовать float:
float number = 250; float result = (number / 100.0) * 30
Также просто поставить там 100.0 с децимальной точкой может быть достаточно.
Потому что, если вы сделаете это, ваш путь 250/100 в целых равняется 20 (вы можете поместить 100 в 200 только дважды, а целое не заботится о остальных 50) и времени 30 = 60.
Ответ №6
Теперь я думаю о каком-то решении:
int number = 250; int result = number * 100; result = (result / 100) * 30; result /= 100; Ответ №7
Вся программа похожа:
double number , result; cout << «Enter the number:»; cin >> number; result = number * 30.0 / 100; cout << «Result = » << result << endl;
и вы получите ответ…
Ответ №8
оценка/товар * 30
ех;
15%
int score, items; cout<<«input your score»<< score<<endl; cin>>score; cout<<«input number of items»<<items<<endl; cin>>items; float total=score/items*15 cout<<«you got «<<total<<«»<<endl;