3

NSTimeInterval == ダブル; (例: 169.12345666663)

「ドット」の後に2桁しか残らないように、この倍精度を切り上げるにはどうすればよいですか?
結果が NSNumber であれば非常に良いでしょう。

4

7 に答える 7

6

これが表示目的の場合は、NSNumberFormatterを見てください。

何らかの理由で計算で double を丸めたい場合は、標準の Cround()関数を使用できます。

于 2009-02-22T23:56:23.783 に答える
2

どうしてもドットの後に 2 桁残したい場合は、100 を掛け、round() 関数を使用して丸め、再度 100 で割ります。ただし、これは、ドットの後に実際に 2 桁しかないことを保証するものではありません。再度分割すると、実際には浮動小数点表記では表現できない数値が得られ、0.1 を期待すると、実際には 0.09999 になる可能性があるためです。 .、これは、浮動小数点表記を使用して 0.1 を実際に表現できないためです。

表示目的でドットの後の 2 桁に丸めたい場合は、提案されているように NSNumberFormatter を使用するか、次のように使用できます。

printf("%.2f\n", yourTimeInterval);
NSLog(@"%.2f\n", yourTimeInterval);

または NSString を取得するには、次を使用することもできます。これは、おそらく NumberFormatter を使用するよりも高速です (ただし、ユーザー設定に従ってローカライズされません)。

NSString * intervalStr = nil;
char * intervalStrTmp = NULL;
asprintf(&intervalStrTmp, "%.2f", yourTimeInteval);
if (intervalStrTmp) {
  intervalStr = [[NSString alloc] initWithUTF8String:intervalStrTmp];
  free(intervalStrTmp);
}
于 2011-03-29T12:20:15.257 に答える
2

NSDecimal は、 NSDecimalRound()を使用して、指定された桁数に丸めることができます。

double d = [[NSDate date] timeIntervalSince1970];
NSDecimal in = [[NSNumber numberWithDouble:d] decimalValue];
NSDecimal out;
NSDecimalRound( &out, &in, 2, NSRoundUp );

NSDecimalNumber *result = [NSDecimalNumber decimalNumberWithDecimal:out];
于 2011-03-24T16:26:28.607 に答える
1

このHumanReadableTimeIntervalは役に立ちますか? ただし、NSString を返します。または、100 を掛けて整数に変換し、再度 100 で割ることで丸めることもできます。

于 2009-02-22T23:51:02.067 に答える
1

ほとんどの場合、数値の丸めは、表示時にのみ行う必要があります。浮動小数点数 (double または not) のプロパティにより、特定の数値を固定精度で格納することができなくなります。

数値をフォーマットして小数点以下 2 桁まで表示する方法については、この他の投稿 を参照してください

于 2009-02-22T23:55:23.850 に答える
0

ANSICround()関数を使用します。

于 2011-03-28T10:17:40.043 に答える
0

次を使用して、いつでも数値を丸めることができます。

double round2dec(double a) { return round(a * 100) / 100; }

しかし、結果を double として表現すると、小数点以下 2 桁しかない可能性があります。

ここで、== 記号を使用することで、2 つの double 数値の比較が 2 番目の小数点に対してのみ行われることを意味します。できることは次のとおりです。

fabs(round2dec(NSTimeInterval) - round2dec(double)) < std::numeric_limits<double>::epsilon()
于 2011-03-30T10:06:31.137 に答える