如何在xcode中修复我的数学运算才能给出正确的答案?

时间:2012-06-12 03:19:09

标签: xcode math operations

我正在构建一个可以进行大量数学和计算的应用程序。我有标签中显示的滑块值,我必须在函数中使用这些值来获得最终值。我有这些滑块值(数字是我作为用户输入来测试公式并查看它是否有效):

Ageslider=20, weightslider=144, feetslider=5,inchesslider=9.03.

我必须首先将重量,英尺和英寸转换为公制以插入整体公式,但用户不需要查看这些值。将这些转换为公制公式是这样的:

weightslider/2.2,  feetslider*12*2.54,   inchesslider*2.54.

现在为整体公式:

66.473+5.0033*((feetslider*12.2.54)+(inchesslider*2.54))+13.7516*(weightslider/2.2)-6.755*ageslider

或简化这是原始公式应该是:

66.473+5.0033*(height in cm)+13.7516*(weight in kg)-6.755*age

当我输入公式

(66.473+5.0033*((feetslider*12.2.54)+(inchesslider*2.54))+13.7516*(weightslider/2.2)-6.755*ageslider)

然后运行程序并使用程序中的测试数字我无法得到最终值,它应该是什么。我已将公式放在excel中,并通过我的计算器以正确的操作顺序运行它并得到1708.7373。当我在程序中运行它时会出现1747.7

然后我尝试将(浮动)放在公式中的滑块值前面,程序得到了这个:1718.67。然后我尝试将(双)放在滑块值的前面,程序得到了这个:1689.62。这是我正在使用的xcode复制的实际代码:

label.text = [[NSString alloc] initWithFormat:@"%.2f",66.473+(5.0033*((feetslider.value*12*2.54)+(inchesslider.value*2.54)))+(13.7516*(weightslider.value/2.2))-(6.755*ageslider.value)];

它也提出了警告:Assignment使得整数指针没有强制转换。 我不知道这意味着什么。

有人请帮助我,我已经坚持了几个小时试图改变公式来获得正确的答案并摆脱警告,但我无法得到它为我的生活!!!

谢谢!

更新!!这是我现在的确切代码,仍然没有得到正确的答案。 当我运行程序时,我仍然得到错误“Assignment从没有强制转换的整数生成指针”。它显示在“if(malebutton = Yes)。

的行上。”

- (IBAction为)malebutton {     if(malebutton = YES){

    //Intermediate values
    float totalWeight;
    totalWeight = weightslider.value*.45454545;
    float heightFeetToCM;
    heightFeetToCM =feetslider.value*12*2.54;
    float heightInchesToCM;
    heightInchesToCM = inchesslider.value*2.54;
    float totalHeight; 
    totalHeight = heightFeetToCM + heightInchesToCM;

    //Final Component Values
    float calculatedHeight;
    calculatedHeight = 5.0033*totalHeight;
    float calculatedWeight;
    calculatedWeight = 13.7516*totalWeight;
    float calculatedAge;
    calculatedAge = 6.755*ageslider.value;

    //Total Value
    float finalValue;
    finalValue = 66.473 + calculatedHeight + calculatedWeight - calculatedAge;

    totalcaloriesburnedlabel.text = [[NSString alloc] initWithFormat:@"%.2f",finalValue];

更新2;

以下是我将滑块连接到标签的方法。除了我在每个上显示的小数位数之外,所有这些格式都是相同的。

-(IBAction)changeLabelFeet { feetLabel.text = [[NSString alloc] initWithFormat: @"%.0f",feetSlider.value]; }

1 个答案:

答案 0 :(得分:0)

从原始答案更新:我回去并在Xcode上尝试了它。我开始只是写入值(浮点年龄= 20;),以查看问题是否在计算中,并最终得到正确的答案,为1708.74(在字符串中浮点数上的.2f设置)。然后我决定看看是否从滑块获取值是问题,从滑块上的年龄开始,其他所有内容仍然是硬编码的,我最初得到了错误的答案并很快意识到我没有在IB中连接我的滑块。纠正后,我得到了正确的答案。这是我的代码。

·H

@interface ViewController : UIViewController {

IBOutlet UILabel *myLabel;
IBOutlet UISlider *ageSlider;
IBOutlet UISlider *weightSlider;
IBOutlet UISlider *feetSlider;
IBOutlet UISlider *inchesSlider;


}

@property (nonatomic, retain) IBOutlet UILabel *myLabel;
@property (nonatomic, retain) IBOutlet UISlider *ageSlider;
@property (nonatomic, retain) IBOutlet UISlider *weightSlider;
@property (nonatomic, retain) IBOutlet UISlider *feetSlider;
@property (nonatomic, retain) IBOutlet UISlider *inchesSlider;

@end

的.m

@interface ViewController ()

@end

@implementation ViewController

@synthesize myLabel;
@synthesize ageSlider;
@synthesize weightSlider;
@synthesize feetSlider;
@synthesize inchesSlider;

-(void)calculateLabel{

//float age = 20;
float age = ageSlider.value;
NSLog(@"My age slider value is %.2f", ageSlider.value);
//float weight = 144;
float weight = weightSlider.value;
NSLog(@"My weight slider value is %.2f", weightSlider.value);
//float heightFeet = 5;
float heightFeet = feetSlider.value;
NSLog(@"My feet slider value is %.2f", feetSlider.value);
//float heightInches = 9.03;
float heightInches = inchesSlider.value;
NSLog(@"My inches slider value is %.2f", inchesSlider.value);


float weightKG = weight*.454545;
float heightFeetToCM = heightFeet * 12 * 2.54;
float heightInchesToCM = heightInches * 2.54;
float totalHeight = heightFeetToCM + heightInchesToCM;

float calculatedHeight = 5.0033 * totalHeight;
float calculatedWeight = 13.7516 * weightKG;
float calculatedAge = 6.755 * age;

float finalValue = 66.473 + calculatedHeight + calculatedWeight - calculatedAge;

myLabel.text = [NSString stringWithFormat:@"%.2f", finalValue];

}

- (void)viewDidLoad
{
    [super viewDidLoad];


    [self calculateLabel];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end

首先,检查以确保您的NSLog看起来像这样......

2012-06-17 23:57:53.557 Testing6 [1404:10103]我的年龄滑块值是20.00

2012-06-17 23:57:53.559 Testing6 [1404:10103]我的体重滑块值是144.00

2012-06-17 23:57:53.559 Testing6 [1404:10103]我的脚滑块值为5.00

2012-06-17 23:57:53.559 Testing6 [1404:10103]我的英寸滑块值为9.03

如果它之后不起作用,我能想到的另一件事就是你的滑块可能不会连续更新(也就是显示你的滑块值的标签显示年龄为20岁用户,但它真的设置为19)。如果我挖掘旧的Xcode项目,我可能会帮助你。让我知道。