I am new to this, I set up my calculations as per the code below, but I think there must be a way to just have one NSNumberFormatter?
With the method below, sometimes I get weird results, maybe because some calculations are using the results from the other ones, any help much appreciated.
Thanks you.
double VolumePerMtrLitres = ((3.141592654/4 * ([textField1.text doubleValue]/1000) * ([textField1.text doubleValue]/1000)) - (3.141592654/4 * ([textField2.text doubleValue]/1000) * ([textField2.text doubleValue]/1000))) * [textField5.text doubleValue] * 1000;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:0];
NSString *numberAsString = [formatter stringFromNumber: [NSNumber numberWithDouble:VolumePerMtrLitres]];
volumePerMeterLitreAnswer.text = [NSString stringWithFormat:@"%@ ltr.", numberAsString];
double LubricationPumpCapacity = [textField6.text doubleValue] / 1000 * [volumePerMeterLitreAnswer.text doubleValue];
NSNumberFormatter *formatter2 = [[NSNumberFormatter alloc] init];
[formatter2 setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter2 setMaximumFractionDigits:0];
NSString *numberAsString2 = [formatter2 stringFromNumber: [NSNumber numberWithDouble:LubricationPumpCapacity]];
pumpSpeedAnswer.text = [NSString stringWithFormat:@"%@ litre per min.", numberAsString2];
double VolumePerPipeLitre = [volumePerMeterLitreAnswer.text doubleValue] * [textField3.text doubleValue];
NSNumberFormatter *formatter3 = [[NSNumberFormatter alloc] init];
[formatter3 setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter3 setMaximumFractionDigits:0];
NSString *numberAsString3 = [formatter3 stringFromNumber: [NSNumber numberWithDouble:VolumePerPipeLitre]];
volumePerPipeLitreAnswer.text = [NSString stringWithFormat:@"%@ ltr.", numberAsString3];
double VolumeForDriveLitres = [volumePerMeterLitreAnswer.text doubleValue] * [textField4.text doubleValue];
NSNumberFormatter *formatter4 = [[NSNumberFormatter alloc] init];
[formatter4 setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter4 setMaximumFractionDigits:0];
NSString *numberAsString4 = [formatter4 stringFromNumber: [NSNumber numberWithDouble:VolumeForDriveLitres]];
volumeForDriveLitreAnswer.text = [NSString stringWithFormat:@"%@ ltr.", numberAsString4];
Your code can be simplified to:
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:0];
double text1 = [textField1.text doubleValue];
double text2 = [textField2.text doubleValue];
double text3 = [textField3.text doubleValue];
double text4 = [textField4.text doubleValue];
double text5 = [textField5.text doubleValue];
double text6 = [textField6.text doubleValue];
double VolumePerMtrLitres = ((M_PI_4 * (text1 / 1000) * (text1 / 1000)) - (M_PI_4 * (text2 / 1000) * (text2 / 1000))) * text5 * 1000;
NSString *numberAsString = [formatter stringFromNumber:@(VolumePerMtrLitres)];
volumePerMeterLitreAnswer.text = [NSString stringWithFormat:@"%@ ltr.", numberAsString];
double LubricationPumpCapacity = text5 / 1000 * [volumePerMeterLitreAnswer.text doubleValue];
NSString *numberAsString2 = [formatter stringFromNumber:@(LubricationPumpCapacity)];
pumpSpeedAnswer.text = [NSString stringWithFormat:@"%@ litre per min.", numberAsString2];
double VolumePerPipeLitre = [volumePerMeterLitreAnswer.text doubleValue] * text3;
NSString *numberAsString3 = [formatter stringFromNumber:@(VolumePerPipeLitre)];
volumePerPipeLitreAnswer.text = [NSString stringWithFormat:@"%@ ltr.", numberAsString3];
double VolumeForDriveLitres = [volumePerMeterLitreAnswer.text doubleValue] * text4;
NSString *numberAsString4 = [formatter stringFromNumber:@(VolumeForDriveLitres)];
volumeForDriveLitreAnswer.text = [NSString stringWithFormat:@"%@ ltr.", numberAsString4];
Notice the user of M_PI_4
to replace your 3.14159 / 4
. Also notice the use of the @(someVariable)
syntax instead of using [NSNumber numberWithXXX:someNumber]
.