我有两个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实例,因此有必要完成所有这些步骤。我担心我可能会失去准确性或执行不必要的步骤。谢谢你的任何建议。
答案 0 :(得分:1)
为什么不用简单的数学?
NSTimeInterval timeInSeconds = [endTime timeIntervalSinceDate:startTime];
double hours = timeInSeconds / 3600;
double rate = [result doubleValue];
double hourlyRate = rate / hours;