1

我有两个 NSDate 实例(一个开始时间和一个结束时间),还有一个 NSDecimalNumber (代表在两个日期之间的时间段内赚取的金额)。我要做的是根据这三个变量计算每小时费率。我想出了一些可行的方法,但对我来说有点过分了,我想知道是否有更简单、更有效的方法。这就是我现在正在做的事情。

计算两个 NSDate 之间的时间量

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 实例,因此有必要完成所有这些步骤。我担心我可能会失去准确性或执行不必要的步骤。感谢您的任何建议。

4

1 回答 1

1

你为什么不只是使用一个简单的数学?

NSTimeInterval timeInSeconds = [endTime timeIntervalSinceDate:startTime];
double hours = timeInSeconds / 3600;
double rate = [result doubleValue];
double hourlyRate = rate / hours;
于 2011-06-11T06:19:57.830 回答