2011-03-02 80 views
2

如何使用Cocoa或Cocoa Touch框架在Objective-C中的貨幣之間進行轉換?Objective-C中的貨幣轉換

+2

這是一個太寬泛的問題。將問題分解成幾個步驟(「從Web服務獲取信息」,「解析信息」,「顯示信息」),研究每個步驟,併發布有關您無法弄清楚的步驟的具體指出的問題。 – 2011-03-02 18:38:26

+0

@JoshuaNozzi:我同意,*除非*有人已經爲你做了工作;) – 2011-03-02 21:44:03

+0

Sacha確實是個幸運的傢伙。 ;-) – 2011-03-02 21:49:17

回答

5

嘛,你不是一個幸運兒:

https://github.com/davedelong/DDUnitConverter

只需將整個 「DDUnitConverter」 子文件夾複製到您的項目,然後執行:

#import "DDUnitConverter.h" 
#import "DDCurrencyUnitConverter.h" 

- (void) convertCurrency { 
    DDUnitConverter *converter = [DDUnitConverter currencyUnitConverter]; 
    NSNumber *from = [NSNumber numberWithInt:42]; 
    NSNumber *to = [converter convertNumber:from fromUnit:DDCurrencyUnitUKPoundSterling toUnit:DDCurrencyUnitUSDollar]; 
    NSLog(@"new value: %@", to); 
} 

,將轉換£42到美元。

價格從IMF自動拉,但如果你真的需要,您可以在單位轉換器實例調用-refreshExchangeRates

-convertNumber:fromUnit:toUnit:呼叫將阻塞,直到費率可以下載和解析。隨後的通話將只使用已經下載的匯率。

+1

它會被更新resultes是指當前的貨幣匯率。 – UserDev 2014-05-07 08:29:55

+1

我試過了,它沒有給出正確的值,例如1 $給1.003(長十進制數)阿聯酋迪拉姆,而它應該是3.67。 – coder 2016-02-01 11:11:24

0

另一種方法是使用YQL(Yahoo查詢語言)來檢索最新的費率。 雅虎的開發網站使Objective-C開始非常容易,並且YQL上有很多SO例子。 http://developer.yahoo.com/social/sdk/objectivec/

您可能會發現雅虎非常好,很自由,他們的條款&許多數據API的條件。它比Dave使用的非專用API要脆弱得多。 Dave編寫了很棒的代碼,但IMF TSV文件幾乎沒有保證可用作YQL服務。

1

其實我已經選擇:

https://github.com/davedelong/DDUnitConverter

價格從IMF,但在轉換過程中拉,有使用NSDecimalNumber功能(decimalNumberByMultiplyingBy和decimalNumberByDividingBy問題:他們不,如果你不給正確的結果使用由字符串創建NSDecimalNumber VAR的),所以我對這樣的轉換方法,現在它的工作:

DDUnitConverter.m

- (NSNumber *)convertNumber:(NSNumber *)number fromUnit:(DDUnit)fromUnit toUnit:(DDUnit)toUnit { 
    if (fromUnit == toUnit) { return number; } 

    //make sure it's an NSDecimalNumber 
    NSDecimalNumber *source = [NSDecimalNumber decimalNumberWithDecimal:[number decimalValue]]; 

    NSDecimalNumber *convertToBaseUnit = [[self class] multiplierForUnit:fromUnit]; 

    NSDecimalNumber * n1 = [NSDecimalNumber decimalNumberWithString:[source stringValue]]; 
    NSDecimalNumber * n2 = [NSDecimalNumber decimalNumberWithString:[convertToBaseUnit stringValue]]; 

    NSDecimalNumber *valueInBaseUnit = [n1 decimalNumberByMultiplyingBy:n2]; 

    NSDecimalNumber *convertFromBaseUnit = [[self class] multiplierForUnit:toUnit]; 
    if ([convertFromBaseUnit isEqual:[NSDecimalNumber zero]]) { 
     convertFromBaseUnit = [NSDecimalNumber one]; 
    } 
    NSDecimalNumber * n3 = [NSDecimalNumber decimalNumberWithString:[valueInBaseUnit stringValue]]; 
    NSDecimalNumber * n4 = [NSDecimalNumber decimalNumberWithString:[convertFromBaseUnit stringValue]]; 

    NSDecimalNumber *valueInTargetUnit = [n3 decimalNumberByDividingBy:n4]; 

    return valueInTargetUnit; 
} 
+0

其工作很多... – sohil 2017-06-05 16:50:19