целочисленное деление — получить процент числа в переполнении стека

Как я могу рассчитать несколько процентов от int?
например, я хочу получить 30% от числа, если я буду использовать этот пример кода, я получу неправильный ответ:

int number = 250;
int result = (number / 100) * 30;

результат будет 60и реальный ответ 75Есть ли способ рассчитать это?

8

Решение

Умножьте перед делением:

int result = number * 30 / 100;

Причина, по которой вы получаете полученный результат, состоит в том, что деление на целочисленные типы приводит к целочисленному результату: 250/100 равно 2. Если вы умножаете перед делением, вы все равно получаете целочисленный результат, но, по крайней мере, вы не потеряли данные на промежуточных этапах. Если вам приходится иметь дело с действительно огромными числами, существует опасность переполнения диапазона, разрешенного int хоть.

В качестве альтернативы вы можете использовать арифметику с плавающей запятой, где деление может давать дроби целых чисел:

int result = number * 0.30;

Это может привести к неожиданные результаты тем не менее, так что лучше использовать целые числа, как указано выше. Или пиши 3.0/10 вместо 0.30,

15

Другие решения

Предполагая, что числа маленькие (ish), вы можете просто перевернуть их:

 int result = (number * 30) / 100;

(Скобки не обязательны, но помогают уточнить).

Это не будет работать, если любое из чисел составляет несколько миллионов, но должно подойти для чисел меньших, чем это.

2

Переключение операндов (как предложили другие) также будет работать, но на случай, если вы не хотите, есть другое решение:

int number = 250;
int result = static_cast<double>(number) / 100 * 30;
2

Попробуй это,

int number = 250;
float result = number  * (float)(30/100.0);
1

Вам нужно выполнить математику с плавающей точкой, в противном случае компилятор выполняет всю арифметику здесь как целые числа.

Вы можете попробовать

int result = (number / 100.0) * 30;
0

Используйте float:

float number = 250;
float result = (number / 100.0) * 30

Также достаточно просто поставить 100.0 с точкой deciaml.

Потому что, если вы сделаете это, ваш метод 250/100 в целых числах будет равен 20 (вы можете поместить 100 в 200 только дважды, а целое число не заботится об остальных 50) и умножить на 30 = 60.

0

Теперь я думаю о каком-то решении:

int number = 250;
int result = number * 100;
result = (result / 100) * 30;
result /= 100;
0

Вся программа похожа на:

double number , result;

cout << "Enter the number:";
cin >> number;

result = number * 30.0 / 100;
cout << "Result = " << result << endl;

и вы получите ответ ….

0
По вопросам рекламы [email protected]