printf를 사용하여 0 뒤에 오는 경우 소수점 이하의 자리 없이 부동 소수점 이하의 형식 지정
printf를 사용하여 0과 다를 경우 소수점 이하 2자리까지만 표시되도록 C에서 플로트를 포맷할 수 있습니까?
예:
12 => 12
12.1 => 12.1
12.12 => 12.12
다음을 사용해 보았습니다.
float f = 12;
printf("%.2f", f)
하지만 이해합니다.
12 => 12.00
12.1 => 12.10
12.12 => 12.12
사용할 수 있습니다.%g
형식 지정자:
#include <stdio.h>
int main() {
float f1 = 12;
float f2 = 12.1;
float f3 = 12.12;
float f4 = 12.1234;
printf("%g\n", f1);
printf("%g\n", f2);
printf("%g\n", f3);
printf("%g\n", f4);
return 0;
}
결과:
1212.112.1212.1234
참고로, 그것과는 달리.f
형식 지정자, 앞에 숫자를 지정하는 경우g
전체 숫자의 길이를 나타냅니다(소수 자릿수가 아닙니다).f
).
위 답변에서 논의한 바에 따르면 소수점 이하의 숫자에 상관없이 작동하는 프로그램이 있습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
float f1 = 12.13;
float f2 = 12.245;
float f3 = 1242.145;
float f4 = 1214.1;
int i = 0;
char *s1 = (char *)(malloc(sizeof(char) * 20));
char *s2 = (char *)(malloc(sizeof(char) * 20));
sprintf(s1, "%f", f1);
s2 = strchr(s1, '.');
i = s2 - s1;
printf("%.*g\n", (i+2), f1);
sprintf(s1, "%f", f2);
s2 = strchr(s1, '.');
i = s2 - s1;
printf("%.*g\n", (i+2), f2);
sprintf(s1, "%f", f3);
s2 = strchr(s1, '.');
i = s2 - s1;
printf("%.*g\n", (i+2), f3);
sprintf(s1, "%f", f4);
s2 = strchr(s1, '.');
i = s2 - s1;
printf("%.*g\n", (i+2), f4);
free(s1);
free(s2);
return 0;
}
그리고 여기 결과물이 있습니다.
12.13
12.24
1242.15
1214.1
다음은 간단한 ObjC 구현입니다.
// Usage for Output 1 — 1.23
[NSString stringWithFormat:@"%@ — %@", [self stringWithFloat:1],
[self stringWithFloat:1.234];
// Checks if it's an int and if not displays 2 decimals.
+ (NSString*)stringWithFloat:(CGFloat)_float
{
NSString *format = (NSInteger)_float == _float ? @"%.0f" : @"%.2f";
return [NSString stringWithFormat:format, _float];
}
%g은 저를 위해 한 것이 아닙니다. 이것은 그렇습니다:-) 여러분 중 일부에게 유용하기를 바랍니다.
언급URL : https://stackoverflow.com/questions/9628645/use-printf-to-format-floats-without-decimal-places-if-only-trailing-0s
'programing' 카테고리의 다른 글
Spring Boot/Angular 4 - 앱 내 라우팅이 서버를 강타합니다. (0) | 2023.07.04 |
---|---|
상하좌우 이동 및 확대/축소 (0) | 2023.07.04 |
구문 오류: 가능하지 않습니다. 이 오류는 무엇입니까? (0) | 2023.07.04 |
MAX() 함수에서 SQL 행 반환 (0) | 2023.07.04 |
xxxxxx.exe는 올바른 Win32 응용 프로그램이 아닙니다. (0) | 2023.07.04 |