2009-06-18 5 views
5

인쇄 할 문자열의 정확한 길이를 double 값에서 지정해야하지만 출력을 필요한 것 이상으로 제한하고 싶지는 않습니다. .C : printf()를 통해 얼마나 오래 인쇄 할 수 있습니까?

printf()로 서식을 지정할 때 6 자리 정밀도 double의 최대 길이는 얼마입니까?

특히 값이 잘리지 않도록하려면 printf("%X.6lg",doubleValue);에서 X에 어떤 값을 지정해야합니까?

길이에 대해 구체적으로 설명해야하는 이유는 이중 값의 많은 문자열 표현으로 구성된 MPI 파생 데이터 형식을 정의하고 있으며 MPI간에 파일의 영역을 나누기 위해 정확한 길이를 알아야하기 때문입니다 프로세스.

나는 분명히 희망합니다. 응답 해 주셔서 미리 감사드립니다.

+0

내가 무엇을 요구하는지 잘 모르겠다 - 모든 값을 0.123456, 1.23456, 12345.6 등과 같이 6 자리 숫자로 길게 만들고 싶습니까? 아니면 소수 부분의 유효 자릿수는 6 자릿수입니까? 분수 값에 관해서는, 값이 "2 진수"(즉, 바이너리로 종료)이고 63/64th 이하인 경우가 아니면 절손을 피할 수있는 방법을 모르겠습니다. –

답변

6

사용 printf("%.6g", doubleValue) 또는 printf("%.6Lg", doubleValue)

참고 정밀 지정자에 선행 숫자 (이하 "폭") 떨어져 떠난다 값의 적분 부분의 길이에 아무런 요구를하지 않습니다 것을.

또한, 소문자 "l"은 값이 long int임을 지정합니다. 대문자 "L"은 long double 값을 지정합니다.

과학 표기법으로 변경하려는 경우 (더 짧은 표현 인 경우) "g"대신 "f"를 사용합니다.

printf reference here을 참조하십시오.

1

많은 유용한 값을 포함하는 < float.h> 중에서 DECIMAL_DIG는 긴 두 배인입니다.

같은 파일 가능성이 가장 높은 플랫폼에 더블 정밀 이상 6 개 자리를 가지고 있음을 알려드립니다 ...

PS :은 또한 위의 데미의 답변을 확인합니다. 그는 나를 도망친 printf()의 여러 가지 결함을 지적합니다.

1

IEEE double의 최대 지수는 1023이므로 최대 double은 1 + 1/2 + 1/4 + 1/8 + ... 등 * 2^1023이됩니다. 10 진수 표기법으로 약 318 자입니다.

"e"형식 지정자를 사용하지 않는 이유는 무엇입니까?

+0

모든 플랫폼이 IEEE 복식을 사용하는 것은 아니기 때문에 표준위원회가 < float.h > ... – DevSolar

관련 문제