Objective-C:使用NSDate和NSDecimalNumber计算每小时费率

时间:2011-06-11 05:19:52

标签: iphone objective-c ios nsdate nsdecimalnumber

我有两个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 个答案:

答案 0 :(得分:1)

为什么不用简单的数学?

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