문제

NSTimeInterval==더블;(예:169.12345666663)

는 방법은 라운드까지 이 두 배가되도록 만 2 자리수는 왼쪽 후"dot"?
는 것은 매우 좋은 결과가 NSNumber.

도움이 되었습니까?

해결책

는 경우 이 표시할 목적으로 살펴보 NSNumberFormatter.

만약 당신이 정말로 원하는 라운드 더블에 귀하의 계산이 어떤 이유로,당신이 사용할 수 있는 표준 C round() 기능입니다.

다른 팁

A 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];

당신이 정말로 원하는 경우 왼쪽 두 자리는 점 후,곱하여 100,라운드를 사용하여 라운드()함수,나눌에 의해 100again.그러나,이것을 보장하지 않습니다 정말 그는 두 자릿수 후에는 점 때문에,분할하여 그것을 다시,당신이 얻을 수 있습니다 수 없는 정말로 표현된 부동 소수점을 표기할 때 기대 0.1 할 수 있습니다 사실을 얻을 0.09999...,하는 수 없기 때문에 정말로 표현 0.1 를 사용하여 부동 소수점의 개념입니다.

하려는 경우에는 라운드 그것은 두 개의 자리한 후에 점을 표시할 목적으로 사용할 수 있습니다 NSNumberFormatter 으로 제안되었거나 사용:

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

을 받@입니다,사용할 수도 있습니다 다음은 아마보다 더 빨리 사용 NumberFormatter(그러나,그것은 지역화에 따라 사용자 환경 설정):

NSString * intervalStr = nil;
char * intervalStrTmp = NULL;
asprintf(&intervalStrTmp, "%.2f", yourTimeInteval);
if (intervalStrTmp) {
  intervalStr = [[NSString alloc] initWithUTF8String:intervalStrTmp];
  free(intervalStrTmp);
}

에서 대부분의 경우 올림 수은 뭔가를 해야만 할서 전시 시간입니다.속성의 부동 소수점(두 번지)한 것을 불가능하여 저장소의 특정 숫자의 고정정밀도.

포맷에 대한 자세한 내용은 숫자를 표시하도록 두 소수 자릿수, 이 다른 글.

HumanReadableTimeInterval help?그것은 반환@입니다,하지만.또는,당신은 라운드에 자신을 곱하여 100 변환,정수와 나눔을 통해 100again.

내가 사용하는 ANSI C round() 기능입니다.

당신은 항상 라운드 번호를 사용:

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

그러나 기회는 그 표현의 결과로 두 번 것입니다 하지만 2 개 소수.

지금은,사용하여 경우==등록하십시오,당신은 당신을 의미하는 비교를 당신의 두 번호는 만들어 두 번째로 구분해서 사용하는 경우가 있습니다여기에 당신이 무엇을 할 수 있습니다:

fabs(round2dec(NSTimeInterval) - round2dec(double)) < std::numeric_limits<double>::epsilon()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top