programing

부동 소수점의 가변 수를 인쇄

bestprogram 2023. 10. 9. 23:29

부동 소수점의 가변 수를 인쇄

다음과 같이 종단되지 않은 고정 길이 문자열을 인쇄할 수 있는 흥미로운 형식을 발견했습니다.

char newstr[40] = {0};
sprintf(newstr,"%.*s",  sizeof(mystr), mystr);

그래서 아마도 printf 명령에 따라 플로트 번호를 인쇄하는 방법이 있을 것 같습니다.

"%8.2f"

정수를 가진 소수점의 수를 선택할 수 있는 능력을 갖습니다.

이와 같은 것:

sprintf(mystr, "%d %f", numberofdecimals, floatnumbervalue)

사용할 수도 있습니다.".*"부동 소수점의 경우 http://www.cplusplus.com/reference/cstdio/printf/ 도 참조하십시오(refers에서 C++로 이동하지만 형식 지정자는 비슷합니다.)

.number:a, A, e, E, f 및 F 지정자의 경우: 소수점 뒤에 인쇄할 자릿수입니다(기본값은 6).

...

.*:정밀도는 형식 문자열에 지정되지 않고 형식을 지정해야 하는 인수 앞에 있는 추가 정수 값 인수로 지정됩니다.

예를 들어,

float floatnumbervalue = 42.3456;
int numberofdecimals = 2;
printf("%.*f", numberofdecimals, floatnumbervalue);

출력:

42.35

필드 폭과 정밀도 모두 별표를 사용할 수 있습니다.

printf("%*.*f\n", myFieldWidth, myPrecision, myFloatValue);

예를 들어 이 참조를 참조합니다.

어떤 이유에서인지 실제 C 라이브러리에서 플로트 포맷을 위한 정밀도와 폭의 가변을 지원하지 않는다면 자신만의 포맷 문자열을 만드는 것은 그리 어렵지 않습니다.

char fmt[6 + 3*(sizeof width + sizeof precision)]; /* sufficient space */
sprintf(fmt, "%%%d.%df\n", width, precision);
printf(fmt, value);

물론 비용이 들지만 상황에 따라 중앙 집중식으로 처리할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/16413609/printf-variable-number-of-decimals-in-float