Как я могу рассчитать несколько процентов от 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
,
Предполагая, что числа маленькие (ish), вы можете просто перевернуть их:
int result = (number * 30) / 100;
(Скобки не обязательны, но помогают уточнить).
Это не будет работать, если любое из чисел составляет несколько миллионов, но должно подойти для чисел меньших, чем это.
Переключение операндов (как предложили другие) также будет работать, но на случай, если вы не хотите, есть другое решение:
int number = 250;
int result = static_cast<double>(number) / 100 * 30;
Попробуй это,
int number = 250;
float result = number * (float)(30/100.0);
Вам нужно выполнить математику с плавающей точкой, в противном случае компилятор выполняет всю арифметику здесь как целые числа.
Вы можете попробовать
int result = (number / 100.0) * 30;
Используйте float:
float number = 250;
float result = (number / 100.0) * 30
Также достаточно просто поставить 100.0 с точкой deciaml.
Потому что, если вы сделаете это, ваш метод 250/100 в целых числах будет равен 20 (вы можете поместить 100 в 200 только дважды, а целое число не заботится об остальных 50) и умножить на 30 = 60.
Теперь я думаю о каком-то решении:
int number = 250;
int result = number * 100;
result = (result / 100) * 30;
result /= 100;
Вся программа похожа на:
double number , result;
cout << "Enter the number:";
cin >> number;
result = number * 30.0 / 100;
cout << "Result = " << result << endl;
и вы получите ответ ….