Цель-C: Расчет почасовой ставки с NSDate и NSDecimalNumber - PullRequest
1 голос
/ 11 июня 2011

У меня есть два экземпляра NSDate (время начала и время окончания), а также один NSDecimalNumber (который представляет сумму, заработанную за период времени между двумя датами).Я пытаюсь рассчитать почасовую ставку на основе этих трех переменных.Я придумал что-то, что работает, но мне это кажется немного чрезмерным, и я хотел знать, существует ли более простой и эффективный способ.Это то, что я делаю сейчас.

Вычисление времени между двумя NSDates

NSTimeInterval timeInSeconds = [endTime timeIntervalSinceDate:startTime];

Преобразование в часы

double hours = timeInSeconds / 3600;

Преобразование двойных часов вNSNumber

NSNumber *duration = [NSNumber numberWithDouble:hours];

Преобразование NSNumber в NSString

NSLocale *locale = [NSLocale currentLocale];
NSString *durationString = [duration descriptionWithLocale:locale];

Использование этой строки для создания NSDecimalNumber

NSDecimalNumber *decimalDuration = [NSDecimalNumber decimalNumberWithString:durationString locale:locale];

Разделение исходного NSDecimalNumber (результат) наэто новое NSDecimalNumber представление времени

NSDecimalNumber *hourlyRate = [result decimalNumberByDividingBy:decimalDuration];

Если я правильно понимаю, единственный способ сделать любую математику, включающую мой оригинальный NSDecimalNumber, состоит в том, чтобы создать другой экземпляр NSDecimalNumber, поэтому необходимо пройти через все этишаги.Я беспокоюсь, что могу потерять точность или выполнить ненужные шаги.Спасибо за любой совет.

1 Ответ

1 голос
/ 11 июня 2011

Почему бы вам просто не использовать простую математику?

NSTimeInterval timeInSeconds = [endTime timeIntervalSinceDate:startTime];
double hours = timeInSeconds / 3600;
double rate = [result doubleValue];
double hourlyRate = rate / hours;
...