Конвертация валюты в Objective-C - PullRequest
2 голосов
/ 02 марта 2011

Как я могу конвертировать между валютами в Objective-C, используя платформу Какао или Какао Touch?

Ответы [ 3 ]

5 голосов
/ 02 марта 2011

Ну, разве вы не счастливчик:

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 голос
/ 08 сентября 2015

На самом деле я выбираю:

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 голосов
/ 16 декабря 2013

Один из вариантов - использовать YQL (Yahoo Query Language) для получения последних показателей. Сайт разработчика Yahoo позволяет довольно легко начать работу с Objective-C, и на YQL есть множество примеров SO. http://developer.yahoo.com/social/sdk/objectivec/

Вы можете найти Yahoo очень милым и либеральным со своими условиями для многих своих API данных. Это также намного менее хрупко, чем не выделенный API, который использует Дейв. Дэйв пишет отличный код, но файл IMF TSV не так гарантированно доступен, как сервисы YQL.

...