1
我有兩個NSDate實例(一個開始時間和一個結束時間),還有一個NSDecimalNumber(它代表兩個日期之間的時間段內獲得的金額)。我想要做的是根據這三個變量計算小時費率。我想出了一些可行的方法,但是感覺有點過分,我想知道是否有更簡單,更有效的方法。這就是我現在正在做的。Objective-C:使用NSDate和NSDecimalNumber計算小時費率
計算
NSTimeInterval timeInSeconds = [endTime timeIntervalSinceDate:startTime];
兩個NSDates之間的時間量轉換成小時
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 *hourlyRate = [result decimalNumberByDividingBy:decimalDuration];
這個新NSDecimalNumber表示將原始NSDecimalNumber(結果)如果我理解正確的,唯一的方式來做任何涉及我的原始NSDecimalNumber的數學是創建NSDecimalNumber的另一個實例,所以有必要經歷所有這些步驟。我擔心我可能會失去準確性或執行不必要的步驟。感謝您的任何建議。
是的,我想這會更好。我想我自己陷入了更長的路徑,因爲我試圖將hourlyRate作爲十進制核心數據瞬態值來存儲,但我相信使用你的方法會更容易,只需將其存儲爲一個包含在NSNumber中的double。謝謝你, – 2011-06-11 06:31:31
@Mark Leonard,很高興幫助你:-) – EmptyStack 2011-06-11 07:05:45
@Mark:如果你正在做多個嚴重的貨幣計算,你會想要堅持十進制數,因爲你會失去精度,然後雙精度。不過,做一個涉及金錢的分裂步驟應該沒問題。 – 2011-06-11 09:37:18