2013-04-11 88 views
1

我對objective-c非常陌生。將英寸轉換爲釐米,反之亦然

我正在嘗試創建一個需要英寸或釐米並將值轉換爲oposite度量系統的函數。

由於我不知道如何設置相應的變量,目前我正在努力如何在objective-c中做一個數學方程。由於我總是從XCode中得到一些錯誤,說這個變量是一個int,但不應該是或者指針是錯誤的,其他的東西... basicaly ...我不知道如何做數學...

The意圖是我將字符串5’11」1.80 cm存儲在其他地方並將其轉換爲相反的公制系統。

下面的代碼試圖做通英寸爲cm ....如果我們通過5'5」 數學公式應該是((5 * 12) + 3) * 2.54這等於180.34和格式化的結果,我從功能看是1.80 cm

下面的代碼是我得到的,但它不適合我。如果有人可以請告訴我如何在我的代碼中執行此操作,我將不勝感激。

- (NSString *)returnRightMetric:(NSString *)theMeasure typeOfMetricUsed:(NSString *)metricType 
{ 
    if ([metricType isEqualToString:@"inches"]) { 

    NSArray* theConvertion = [theMeasure componentsSeparatedByCharactersInSet: 
           [NSCharacterSet characterSetWithCharactersInString:@"’」"]]; 
    NSInteger* value1 = [theConvertion[0] intValue]; 
    NSInteger* value2 = [theConvertion[1] intValue]; 

    float *number = ((value1 * 12) + value2) * 2.54; 
///..... 

    } else if ([metricType isEqualToString:@"cm"]) 
    { 
    } 

    return result; 
} 
+1

爲什麼你會用這麼多的字符串來完成一個簡單的數值轉換?我有四個方法,每個方法都取一個浮點數並返回一個浮點數。這些名字將使完美的事情變得清晰。 – duffymo 2013-04-11 18:15:34

+0

@duffymo - 據推測,他希望能夠解析字符輸入。 – 2013-04-11 18:18:08

+0

請嘗試在整數評估中添加'(float)';這樣:'float * number =(float)((value1 * 12)+ value2)* 2.54;' – tolgamorf 2013-04-11 18:19:02

回答

2
NSArray* theConvertion = [theMeasure componentsSeparatedByCharactersInSet: 
          [NSCharacterSet characterSetWithCharactersInString:@"’」"]]; 
int value1 = [theConvertion[0] intValue]; 
int value2 = [theConvertion[1] intValue]; 

float number = ((value1 * 12) + value2) * 2.54; 
NSString *formattedNumber = [NSString stringWithFormat:@"%.02f", (number/100)]; 

因此,在短期,你需要知道原生/基本類型的和引用類型(類型使用指針的這種性格之間的區別 - > *這可能有助於Link

+0

Xcode說未使用的變量「數字」 – 2013-04-11 18:20:22

+3

@JonathanThurft - Benny指出(非常糟糕),你錯誤地將'number'聲明爲'float *'(指向float的指針)而不是'float'。如果這是您想要返回的值,請將其分配給'result'或僅使用'result'而不是'number'。 – 2013-04-11 18:22:17

+0

:)這是因爲你沒有在別處使用它。這是一個警告,我正在猜測代碼清理的幫助。 在某處使用「數字」,警告將消失。 – 2013-04-11 18:22:47

3

出現的問題因爲你在NSIntegerfloat使用指針我已經修改了與兩釐米和英寸的實現你的方法,具體如下:

- (NSString *)returnRightMetric:(NSString *)theMeasure typeOfMetricUsed:(NSString *)metricType 
{ 
    NSString *result = nil; 

    if ([metricType isEqualToString:@"inches"]) { 
     NSArray* theConvertion = [theMeasure componentsSeparatedByCharactersInSet: 
            [NSCharacterSet characterSetWithCharactersInString:@"’」"]]; 
     NSInteger value1 = [theConvertion[0] intValue]; 
     NSInteger value2 = [theConvertion[1] intValue]; 

     float number = ((value1 * 12) + value2) * 2.54; 
     result = [NSString stringWithFormat:@"%.02f cm", round(number * 100.0)/100.0]; 


    } else if ([metricType isEqualToString:@"cm"]) { 
     float value = [theMeasure floatValue]; 
     float number = value/2.54; 

     if (number > 12.0) { 
      result = [NSString stringWithFormat:@"%i’%i」", (int)floor(number/12.0), (int)number % 12]; 

     } else { 
      result = [NSString stringWithFormat:@"0’%i」", (int)round(number)]; 
     } 

    } 

    NSLog(@"result: %@", result); 
    return result; 
} 

一些測試:

[self returnRightMetric:@"5’11」" typeOfMetricUsed:@"inches"]; 
[self returnRightMetric:@"180.34 cm" typeOfMetricUsed:@"cm"]; 
[self returnRightMetric:@"0’11」" typeOfMetricUsed:@"inches"]; 
[self returnRightMetric:@"27.94 cm" typeOfMetricUsed:@"cm"]; 

輸出:這裏

result: 180.34 cm 
result: 5’11」 
result: 27.94 cm 
result: 0’11」 
1

從最後的答案(來自tolgamorf)一些testings之後是最後的版本。對我來說,它完美的作品。

- (NSString *)returnRightMetric:(NSString *)theMeasure typeOfMetricUsed:(NSString *)metricType 
{ 
    NSString *result = nil; 

    if ([metricType isEqualToString:@"inches"]) { 
     if ([theMeasure isEqualToString:@""]) { 
      return @"0"; 
     } 
     NSArray* theConvertion = [theMeasure componentsSeparatedByCharactersInSet: 
            [NSCharacterSet characterSetWithCharactersInString:@"’」"]]; 
     NSInteger value1 = [theConvertion[0] intValue]; 
     NSInteger value2 = [theConvertion[1] intValue]; 

     float number = ((value1 * 12) + value2) * 2.54; 
     result = [NSString stringWithFormat:@"%.0f cm", round(number * 100.0)/100.0]; 


    } else if ([metricType isEqualToString:@"cm"]) { 
     float value = [theMeasure floatValue]; 
     float number = value/2.54; 

     if (roundf(number) >= 12.0) { 
      if ((int)round(number) % 12==0) { 
       result = [NSString stringWithFormat:@"%i’%i」", (int)roundf(number/12.0), (int)round(number) % 12]; 
      }else{ 
       result = [NSString stringWithFormat:@"%i’%i」", (int)floorf(number/12.0), (int)round(number) % 12]; 
      } 
     } else { 
      result = [NSString stringWithFormat:@"0’%i」", (int)round(number)]; 
     } 
    } 
    NSLog(@"result: %@", result); 
    return result; 
} 
1

對於今天我們有用的API從HealthKit:

let cm_q = HKQuantity(unit: HKUnit(from: .centimeter), doubleValue: 180) 
var inch_string = h_formatter.string(fromMeters: cm_q.doubleValue(for: HKUnit.meter())) 

var inches_double = cm_q.doubleValue(for: HKUnit.inch()) 
let inch_q = HKQuantity(unit: HKUnit(from: .inch), doubleValue: inches_double) 
var cm_d = inch_q.doubleValue(for: HKUnit(from: .centimeter)) 
var string = h_formatter.string(fromValue: cm_d, unit: .centimeter) 

只需複製到操場上玩,從釐米的值轉換爲英寸和背部。格式化程序配置:

let h_formatter = LengthFormatter() 
h_formatter.isForPersonHeightUse = true 
h_formatter.unitStyle = .short 

在結果中,我們有:

180釐米 - > 「5」10.866「,」 再回到180釐米

我希望對大家有所幫助。

相關問題