условное приведение переменных в C - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть следующее выражение, где все переменные имеют тип int (и в упражнении было указано, что они должны быть целыми)

final_grade = (0.85*exam_grade) + (0.15*homework_grade);

В приведенном выше выражении значения, такие как 82,499, должны быть преобразованы в 82, а 82,5 - вбыть преобразован в 83.

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

final_grade = (0.85*exam_grade) + (0.15*homework_grade);
final_grade = (float)final_grade;

Ответы [ 3 ]

3 голосов
/ 25 сентября 2019

Чтобы вычислить результат с помощью целочисленной арифметики, пусть процент за оценку экзамена будет PE ( например , 85), а процент за оценку домашней работы будет PH.Тогда округленное значение равно:

(PE*exam_grade + PH*homework_grade + 50) / 100

. При вычислении результата с использованием арифметики с плавающей запятой возникает риск того, что из-за ошибок в арифметике с плавающей запятой доля перед округлением будет немного ниже 0,5, даже еслиматематический результат, вычисленный с вещественной арифметикой, будет точно равен .5, и, следовательно, результат после округления будет неправильным.

2 голосов
/ 25 сентября 2019

Попробуйте это: если предположить, что переменная final_grade имеет тип int.

#include <math.h>
int final_grade = round((0.85*exam_grade) + (0.15*homework_grade));

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

0 голосов
/ 25 сентября 2019

Далее выполняется вычисление, затем округляется и затем преобразуется в int:

int final_grade = (0.85*exam_grade) + (0.15*homework_grade) + 0.5;

(преобразование в int происходит автоматически, поскольку lvalue равно int.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...