округление моего десятичного числа с точностью до половины или целого числа? - PullRequest
4 голосов
/ 05 апреля 2011

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

ниже показано, как у меня есть эта часть моего кода ...

float ab1 = [abdomen1Input.text floatValue];
float ab2 = [abdomen2Input.text floatValue];
float ab3 = [abdomen3Input.text floatValue];
float hip1 = [hips1Input.text floatValue];
float hip2 = [hips2Input.text floatValue];
float hip3 = [hips3Input.text floatValue];
float neck1 = [neck1Input.text floatValue];
float neck2 = [neck2Input.text floatValue];
float neck3 = [neck3Input.text floatValue];
float height1 = [heightInput.text floatValue];
float neckAvg;
float abHipAvg;
float cirVal;

(abHipAvg = (((ab1+ab2+ab3)/3)+((hip1+hip2+hip3)/3)));

(neckAvg = ((neck1+neck2+neck3)/3));

(cirVal = (abHipAvg - neckAvg));

что мне нужно сделать, это округлить «abHipAvg» и «neckAvg» до ближайшего .5 или .0. Пользователи будут вводить только .25, .5 или .75, но как только я разделю их на 3 нужно округлить этот ответ вверх или вниз до ближайшей половины, чтобы остальные мои вычисления работали правильно. Я попытался просмотреть некоторые вопросы здесь, чтобы найти решение, потому что я видел один похожий на это, прежде чем я просто не могу вспомнить, где или что печатать при поиске. Если кто-то может указать мне правильное направление, я был бы очень признателен.

1 Ответ

8 голосов
/ 05 апреля 2011

Самый простой способ - взять ваш последний номер, раз 2 и раунд.Затем разделите на 2.

(abHipAvg = (((ab1+ab2+ab3)/3)+((hip1+hip2+hip3)/3)));
abHipAvg = roundf(abHipAvg * 2.0f) / 2.0f;

и то же самое с neckAvg.

...