2011-03-02 83 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