1

NSDate の 2 つのインスタンス (開始時刻と終了時刻) と、1 つの NSDecimalNumber (2 つの日付の間の期間に獲得した金額を表す) があります。私がやろうとしているのは、これら 3 つの変数に基づいて時給を計算することです。機能するものを思いついたのですが、少しやり過ぎに感じたので、もっと簡単で効率的な方法がないか知りたいと思いました。これが私が今していることです。

2 つの NSDates 間の時間を計算する

NSTimeInterval timeInSeconds = [endTime timeIntervalSinceDate:startTime];

これを時間に換算すると

double hours = timeInSeconds / 3600;

時間の double を 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 に答える