2011-07-03 5 views
5

은이 같은 이중에서 문자열을 얻으려고 : 내가 원하는 결과를 얻을 대부분의 번호와stringWithFormat의 반올림을 방지하는 방법이 있습니까?

double aDouble; 
NSString* doubleString = [NSString stringWithFormat:@"%g", aDouble]; 

을하지만,

10000.03 

내가 얻을 :

10000 
내 문자열로

. 이 문제를 방지 할 수있는 방법이 있습니까? 내가

수레 두 번 우리가 기본 열에서보고 싶은 수의 두 가지 표현이 기지 결과를 .2f 대신 %의 g의

10000.03 
+0

대신 '% lf'을 (를) 사용해보십시오. – PengOne

답변

1

시도 %의 문자열을 원하는, 더는 없다 것처럼 10 진수의 1/3을 유한 한 자릿수로 정확하게 표현하는 방법은 기수 2에서 정확히 표현할 수없는 많은 기수 10입니다. 예를 들어 0.1 (1/10)은 기수 2에서 정확하게 표현할 수 없습니다

3

%g은 정밀도 지정자가 없으면 까다로울 수 있습니다. %fdouble 값과 함께 사용할 수 있으며 %.2f을 사용하여 소수점 이하 자릿수를 제한 할 수 있습니다 (2을 원하는 자릿수로 바꾸십시오).

%g

다음 알고리즘에 따라 %f 또는 %e 중에서 선택 포맷 지시자이다

  • 비제 정밀도가 지정되어있는 경우, P 그 정밀도
  • 제로는 경우하자 정밀도가 지정 되었으면 P이 1이됩니다.
  • 정밀도가 지정되지 않은 경우 P을 6
  • 변환이 %e 형식 지정자를 사용한다면 X이 지수하자
    • P 하면>X> = -4, 변환 스타일 %f 및 정밀 P 함께 - (X + 1)
    • 그렇지 않으면, 변환 스타일 %e 정밀 P 함께 - 1
  • # 플래그가 사용되지 않으면 나머지 후미가 결과의 소수 부분에서 제거되고 소수 부분이 남아 있지 않으면 소수점 문자가 제거됩니다. 1.000003e + 04 제공 %e와 10000.03 변환 때 경우

, %g이 때문에 P, = 6. 정확도를 지정하지 않고, 지수는 따라서 X = 4 4.정밀 1 (하나 (+ 1-4) = 1하지만 10000.03 - (X + 1) = 6 - P 보낸는 변환 스타일 %f 정밀 P으로 X> = -4> 소수점 이하 자릿수)는 소수점 이하 자릿수가없는 10000.0을 산출하므로 %g은 10000.03을 10000으로 나타냅니다.

관련 문제