如何在xcode中修正数学运算以给出正确答案?

如何在xcode中修正数学运算以给出正确答案?,xcode,math,operations,Xcode,Math,Operations,我正在开发一个应用程序,它可以做很多数学和计算。我有标签中显示的滑块值,我必须在函数中使用这些值来获得最终值。我有这些滑块值(这些数字是我作为用户输入来测试公式并查看其是否有效): 我必须首先将重量、英尺和英寸转换为公制,以插入整个公式,但用户不需要查看这些值。要将这些转换为公制,公式如下: weightslider/2.2, feetslider*12*2.54, inchesslider*2.54. 现在来看看整体公式: 66.473+5.0033*((feetslider*12.2

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

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

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

然后,我尝试将(float)放在公式中滑块值的前面,程序得到如下结果:
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)];
它还提出了警告:赋值从整数生成指针而不进行强制转换。 我不知道那是什么意思

有人请帮帮我,我已经被困在这几个小时试图改变公式周围得到正确的答案和摆脱警告,但我不能得到它为我的生命

谢谢

更新!!这是我现在掌握的确切代码,仍然没有找到正确的答案。 当我运行该程序时,仍然会出现错误“赋值从整数生成指针而不进行强制转换”。它显示在带有“if(malebutton=Yes)”的行上

-(iAction)手动按钮{ 如果(malebutton=YES){

更新2

下面是我如何将滑块连接到它们的标签上的。所有滑块的格式都是相同的,只是每个滑块上显示了多少个小数

-(iAction)changeLabelFeet{
feetLabel.text=[[NSString alloc]initWithFormat:@“%.0f”,feetSlider.value];

}

从原始答案更新:我回去自己在Xcode上尝试了它。我开始只是将值(float age=20;)写入,看看问题是否在计算中,最后得到了正确的答案,即1708.74(字符串中的float设置为.2f).然后我决定看看是否要从滑块上获取值是个问题,从滑块上的年龄开始,其他一切仍然是硬编码的,我最初得到了错误的答案,很快就意识到我没有在IB中连接滑块。更正后,我得到了正确的答案。这是我的代码

h

m

因此,首先,检查以确保您的NSLog如下所示

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

2012-06-17 23:57:53.559测试6[1404:10103]我的重量滑块值是144.00

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

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


如果在那之后它不起作用,我能想到的另一件事是,你的滑块可能没有持续更新(也就是说,显示滑块值的标签向用户显示20 on age,但实际上设置为19)。如果我翻查我以前的Xcode项目,我可能会帮你。让我知道。

从编程的角度来看,这可能会令人不快,但你是否尝试过自己掌握操作顺序?例如,而不是“(feetslider.value*12*2.54)+(incheslider.value*2.54)在您的公式中,创建一个中间变量“totalHeight=(feetslider.value*12*2.54)+(inchessSlider.value*2.54)”,然后将totalHeight插入到用于label.text=……的公式中。这是一个打字错误?(feetslider*12.2.54)您想要(feetslider*12*2.54)吗?但是@tarheel是对的,用中间值来分解它。沃伦·伯顿,是的,它应该是一个打字错误(feetslider*12*2.54)@tarheel这可能是一个愚蠢的问题,但我对所有这些都很陌生。我将在何处生成中间变量/我将如何编写它?你能给我一个示例代码吗?当我回到自己的计算机时,我将不得不再次查看它,在那里我可以看到Xcode为自己所说的内容(明天或周一).既然你说你对这一切都不熟悉,我想我应该提到你应该开始使用标准的大小写惯例,例如,你现在命名项目的方式是feetslider,但应该是feetslider。不,它仍然没有给出正确的答案。我将在接下来的2条注释中发布我的确切代码,因为它太长了很抱歉,我意识到我可以编辑我问的第一个问题。我在那里发布了代码,以便更容易阅读!我使用了你的示例,并将等价物编码到我的项目中。因此,现在我遇到了一个新问题。我用我认为是数字20、144、5和9.03(这些是标签中显示的数字)测试了该程序。但是,NSLog打印出了数字20.17、144.03、4.74和9.03。那么,如何使滑块值实际等于它们所显示的值呢?这个问题有意义吗?我还更新了原始问题,以显示如何将滑块连接到标签。基于您已将.0f设置为在la中向用户显示的值这一事实贝尔,我假设你想在计算中使用整数……然后在slider.value周围使用float或ceil函数。例如
float age=floor(ageSlider.value);
我想了好几次(例如,我将使用age slider)标签中的值将显示20,但NSLog将打印出19.67或接近20的其他值。
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)];
    //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];
@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
@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