float vlaue возвращает 0? - PullRequest
       1

float vlaue возвращает 0?

1 голос
/ 02 апреля 2011

Хорошо, это будет немного долго, и я прошу прощения за это, но здесь это.

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

У меня есть 3 класса для мужчин и 3 класса для женщин.

 maleBFCinput 
 maleBFCdata
 maleBFCresults

 femaleBFCinput
 femaleBFCdata
 femaleBFCresults

В классах ввода, у меня есть текстовые поля для ввода данных пользователем, вычисления производятся внутри "maleBFCinput.m".После выполнения расчетов они переносятся в класс «data», а затем в класс «results».

Мужская сторона работает безупречно.Однако с женской стороны есть проблема.на results.xib у меня есть 7 этикеток.возраст / рост / вес / минимальный вес / максимальный вес / жировые отложения / разрешенный жир.

метка "bodyfat" на женских результатах возвращает 0.используя ту же технику, которую я использовал для вычисления мужской стороны, которая работает так, как задумано, я продолжаю получать 0.

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

ниже приведены небольшие фрагменты кода, который у меня есть.

femaleBFCinput.h

    UITextField *ageInput;
    UITextField *heightInput;
    UITextField *weightInput;
    UITextField *hips1Input;
    UITextField *hips2Input;
    UITextField *hips3Input;
    UITextField *neck1Input;
    UITextField *neck2Input;
    UITextField *neck3Input;
    UITextField *abdomen1Input;
    UITextField *abdomen2Input;
    UITextField *abdomen3Input;

    float heightFactor;
    float weightFactor;
    float abHipsFactor;
    float abFactor;
    float neckFactor;
    float minWeight;
    float maxWeight;
    float maxBodyFatPercentage;
    float abdomenAvg;
    float neckAvg;
    float hipsAvg;
    float abHipsValue;
    float abNeckSubValue;
    float bodyFatPercentage;
    float circumferenceValue;

}

@property(nonatomic,retain) IBOutlet UITextField *ageInput;
@property(nonatomic,retain) IBOutlet UITextField *weightInput;
@property(nonatomic,retain) IBOutlet UITextField *heightInput;
@property(nonatomic,retain) IBOutlet UITextField *abdomen1Input;
@property(nonatomic,retain) IBOutlet UITextField *abdomen2Input;
@property(nonatomic,retain) IBOutlet UITextField *abdomen3Input;
@property(nonatomic,retain) IBOutlet UITextField *neck1Input;
@property(nonatomic,retain) IBOutlet UITextField *neck2Input;
@property(nonatomic,retain) IBOutlet UITextField *neck3Input;
@property(nonatomic,retain) IBOutlet UITextField *hips1Input;
@property(nonatomic,retain) IBOutlet UITextField *hips2Input;
@property(nonatomic,retain) IBOutlet UITextField *hips3Input;

- (float) getMinWeight;
- (float) getMaxWeight;
- (float) getCircumferenceValue;
- (float) getMaxBodyFatPercentage;
- (float) getAbdomenAvg;
- (float) getNeckAvg;
- (float) getAbHipsFactor;
- (float) getBodyFatPercentage;
- (float) getHipsAvg;

femaleBFCinput.m

// Get Abdomen Avg..

- (float) getAbdomenAvg
{
    float abdomen1Float = [abdomen1Input.text floatValue];
    float abdomen2Float = [abdomen2Input.text floatValue];
    float abdomen3Float = [abdomen3Input.text floatValue];

    (abdomenAvg = ((abdomen1Float + abdomen2Float + abdomen3Float) / 3));

    return abdomenAvg;
}

// Get Neck Avg..

- (float) getNeckAvg
{
    float neck1Float = [neck1Input.text floatValue];
    float neck2Float = [neck2Input.text floatValue];
    float neck3Float = [neck3Input.text floatValue];

    (neckAvg = ((neck1Float + neck2Float + neck3Float) / 3));
    return neckAvg;
}

// Get Hips Avg..

- (float) getHipsAvg
{
    float hips1Float = [hips1Input.text floatValue];
    float hips2Float = [hips2Input.text floatValue];
    float hips3Float = [hips3Input.text floatValue];

    (hipsAvg = ((hips1Float + hips2Float + hips3Float) / 3));
    return hipsAvg;
}

//-----Get AbNeck Factor----------------------------------

- (float) getAbHipsFactor
{
    float abTempAvg = [self getAbdomenAvg];
    float hipsTempAvg = [self getHipsAvg];

    (abHipsValue = (abTempAvg + hipsTempAvg));

    return abHipsValue;
}


//----Get Circumference Value-----------------------------

- (float) getCircumferenceValue
{

    (circumferenceValue = (abHipsValue - neckAvg));

    return circumferenceValue;
}

// Get Body Fat Percentage..

- (float) getBodyFatPercentage
{
    float circumferenceTempValue = [self getCircumferenceValue];
    float heightTempValue = [heightInput.text floatValue];


    if (heightTempValue >= 58.00 && heightTempValue <= 58.49) {
        if (circumferenceTempValue >= 45.00 && circumferenceTempValue <= 45.49) {bodyFatPercentage = 19;}
        else if (circumferenceTempValue >= 45.50 && circumferenceTempValue <= 45.99) {bodyFatPercentage = 20;}
        else if (circumferenceTempValue >= 46.00 && circumferenceTempValue <= 46.49) {bodyFatPercentage = 21;}
        else if (circumferenceTempValue >= 46.50 && circumferenceTempValue <= 46.99) {bodyFatPercentage = 21;}

 else if (heightTempValue >= 77.50 && heightTempValue <= 77.99) {
        if (circumferenceTempValue >= 53.50 && circumferenceTempValue <= 53.99) {bodyFatPercentage = 19;}
        else if (circumferenceTempValue >= 54.00 && circumferenceTempValue <= 54.49) {bodyFatPercentage = 20;}
        else if (circumferenceTempValue >= 54.50 && circumferenceTempValue <= 54.99) {bodyFatPercentage = 20;}
        else if (circumferenceTempValue >= 55.00 && circumferenceTempValue <= 55.49) {bodyFatPercentage = 21;}

        etc..
        etc.. (theres about 4000ish lines of if / else if statements in here so i just pasted a few so you see what i have)

        else if (circumferenceTempValue >= 77.50 && circumferenceTempValue <= 77.99) {bodyFatPercentage = 45;}
        else if (circumferenceTempValue >= 78.00 && circumferenceTempValue <= 78.49) {bodyFatPercentage = 46;}
        else if (circumferenceTempValue >= 78.50 && circumferenceTempValue <= 78.99) {bodyFatPercentage = 46;}
        else if (circumferenceTempValue >= 79.00 && circumferenceTempValue <= 79.49) {bodyFatPercentage = 47;}
    }

    return bodyFatPercentage;

}



- (IBAction)calculate:(id)sender {

    FemaleBFCresults *femaleBFCresults = [[FemaleBFCresults alloc] initWithNibName:@"FemaleBFCresults" bundle:nil];

    FemaleBFCdata *femaleBFCData = [[FemaleBFCdata alloc] init];
    femaleBFCresults.femaleBFCdata = femaleBFCData;

    femaleBFCresults.femaleBFCdata.ageInput = ageInput.text;
    femaleBFCresults.femaleBFCdata.heightInput = heightInput.text;
    femaleBFCresults.femaleBFCdata.weightInput = weightInput.text;

    NSString *minWeightString = [[NSString alloc] initWithFormat:@"%.0f", [self getMinWeight]];
    femaleBFCresults.femaleBFCdata.minWeight = minWeightString;
    [minWeightString release];

    NSString *maxWeightString = [[NSString alloc] initWithFormat:@"%.0f", [self getMaxWeight]];
    femaleBFCresults.femaleBFCdata.maxWeight = maxWeightString;
    [maxWeightString release];

    NSString *maxBodyFatString = [[NSString alloc] initWithFormat:@"%.0f", [self getMaxBodyFatPercentage]];
    femaleBFCresults.femaleBFCdata.maxBodyFat = maxBodyFatString;
    [maxBodyFatString release];

    NSString *bodyFatString = [[NSString alloc] initWithFormat:@"%.0f", [self getBodyFatPercentage]];
    femaleBFCresults.femaleBFCdata.bodyFat = bodyFatString;
    [bodyFatString release];


    femaleBFCresults.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
    [self presentModalViewController:femaleBFCresults animated:YES];
    [self.view removeFromSuperview];
    [femaleBFCresults release];

}

femaleBFCdata.h

@interface FemaleBFCdata : NSObject {


    NSString *ageInput;
    NSString *heightInput;
    NSString *weightInput;
    NSString *neckAvg;
    NSString *abAvg;
    NSString *hipsAvg;
    NSString *abHipFactor;
    NSString *bodyFat;
    NSString *maxBodyFat;
    NSString *minWeight;
    NSString *maxWeight;
    NSString *circumference;

}

@property (nonatomic, retain) NSString *ageInput;
@property (nonatomic, retain) NSString *heightInput;
@property (nonatomic, retain) NSString *weightInput;
@property (nonatomic, retain) NSString *neckAvg;
@property (nonatomic, retain) NSString *abAvg;
@property (nonatomic, retain) NSString *hipsAvg;
@property (nonatomic, retain) NSString *abHipFactor;
@property (nonatomic, retain) NSString *bodyFat;
@property (nonatomic, retain) NSString *maxBodyFat;
@property (nonatomic, retain) NSString *minWeight;
@property (nonatomic, retain) NSString *maxWeight;
@property (nonatomic, retain) NSString *circumference;

femaleBFCdata.m

@synthesize ageInput;
@synthesize heightInput;
@synthesize weightInput;
@synthesize neckAvg;
@synthesize abAvg;
@synthesize hipsAvg;
@synthesize abHipFactor;
@synthesize bodyFat;
@synthesize maxBodyFat;
@synthesize minWeight;
@synthesize maxWeight;
@synthesize circumference;

- (void)dealloc {

    self.ageInput = nil;
    self.heightInput = nil;
    self.weightInput = nil;
    self.neckAvg = nil;
    self.abAvg = nil;
    self.hipsAvg = nil;
    self.abHipFactor = nil;
    self.bodyFat = nil;
    self.maxBodyFat = nil;
    self.minWeight = nil;
    self.maxWeight = nil;
    self.circumference = nil;
    [super dealloc];
}

femaleBFCresults.h

@interface FemaleBFCresults : UIViewController {

    FemaleBFCdata *femaleBFCdata;
    UILabel *displayAge;
    UILabel *displayHeight;
    UILabel *displayWeight;
    UILabel *displayBodyFat;
    UILabel *displayMaxBodyFat;
    UILabel *displayMinWeight;
    UILabel *displayMaxWeight;

}

@property (nonatomic, retain) FemaleBFCdata *femaleBFCdata;
@property (nonatomic, retain) IBOutlet UILabel *displayAge;
@property (nonatomic, retain) IBOutlet UILabel *displayHeight;
@property (nonatomic, retain) IBOutlet UILabel *displayWeight;
@property (nonatomic, retain) IBOutlet UILabel *displayBodyFat;
@property (nonatomic, retain) IBOutlet UILabel *displayMaxBodyFat;
@property (nonatomic, retain) IBOutlet UILabel *displayMinWeight;
@property (nonatomic, retain) IBOutlet UILabel *displayMaxWeight;

- (IBAction)goBack:(id)sender;

@end

femaleBFCdata.m

@synthesize femaleBFCdata;
@synthesize displayAge;
@synthesize displayHeight;
@synthesize displayWeight;
@synthesize displayBodyFat;
@synthesize displayMaxBodyFat;
@synthesize displayMinWeight;
@synthesize displayMaxWeight;

- (void)viewDidLoad {

    self.displayAge.text = femaleBFCdata.ageInput;
    self.displayHeight.text = femaleBFCdata.heightInput;
    self.displayWeight.text = femaleBFCdata.weightInput;
    self.displayBodyFat.text = femaleBFCdata.bodyFat;
    self.displayMaxBodyFat.text = femaleBFCdata.maxBodyFat;
    self.displayMinWeight.text = femaleBFCdata.minWeight;
    self.displayMaxWeight.text = femaleBFCdata.maxWeight;

    [super viewDidLoad];
}

- (void)dealloc {

    [displayAge dealloc];
    [displayHeight dealloc];
    [displayWeight dealloc];
    [displayBodyFat dealloc];
    [displayMaxBodyFat dealloc];
    [displayMinWeight dealloc];
    [displayMaxWeight dealloc];

    [super dealloc];
}

Как я уже сказал, мужские классы, которые проводятся точно так же, как это работает, прекрасно.но на женских классах я продолжаю получать 0 баллов за свой класс результатов, и я не могу понять, почему.Я работаю над этим уже несколько месяцев.Я взял отпуск на несколько недель, и я подумал, что у меня это работает, прежде чем я взял перерыв, но я думаю, что нет.У кого-нибудь есть идеи, которые помогут мне решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 02 апреля 2011

Вы абсолютно уверены, все ли ваши поля ввода подключены?Запрашивая нулевое значение для его -floatValue, вы получите нулевой (интерпретируемый как 0) ответ.

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

Хорошо, так что я заработал, округлив все «средние», которые я вычислял, прежде чем я получил «bodyfatcalculations»

 - (float)getabHipAvg {
     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];

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

     return abHipAvg; }

 - (float)getneckAvg {
     float neck1 = [neck1Input.text floatValue];
     float neck2 = [neck2Input.text floatValue];
     float neck3 = [neck3Input.text floatValue];

     (neckAvg = ((neck1+neck2+neck3)/3));
     neckAvg = roundf(neckAvg * 2.0f) / 2.0f;

     return neckAvg;
      }

 - (float)getCircumferenceValue {
     float abHipTempAvg = [self getabHipAvg];
     float neckTempAvg = [self getneckAvg];

     (circumferenceValue = (abHipTempAvg - neckTempAvg));
     circumferenceValue = roundf(circumferenceValue *2.0f) / 2.0f;

    return circumferenceValue; }

Так что да, это мое решение, во всех утверждениях if / else if не было ничего плохого, это был тот факт, что деление на 3 для получения среднего значения дало мне гораздо более длинный десятичный знак, чем мне нужно, поэтому округляя ближайшая половина решила мою проблему. Теперь я получаю ответ, который стоит выйти.

Спасибо всем за помощь !!

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