소수점 이하 값을 정수형으로 얻으려면, 원하는 소수점 자리수만큼 10의 거듭제곱을 곱하고 나머지연산을 하면된다.
int main()
{
float pie = 3.141592;
printf("%d.%d", (int)pie, (int)(pie*1000000) % 1000000);
return 0;
}
다른 예시
byte를 KB 또는 MB로 변환하는건데, a/b의 소수점 이하 둘째자리 까지의 값을 정수형으로 알고 싶으면 a*10^2/b 하면된다. 그 이하는 버림.
#include <stdio.h>
void printSizeInKBorMB(int byte) {
int size;
int decimal;
char unit;
if (byte < 1024 * 1024) { // 1MB 미만
size = byte / 1024;
decimal = ((byte % 1024) * 1000) / 1024;
unit = 'K';
} else { // 1MB 이상
size = byte / (1024 * 1024);
decimal = ((byte % (1024 * 1024)) * 1000) / (1024 * 1024);
unit = 'M';
}
if (decimal == 0) { // 소수점 이하 값이 없는 경우
printf("%d %cB\n", size, unit);
} else { // 소수점 이하 값이 있는 경우
printf("%d.%03d %cB\n", size, decimal, unit);
}
}
int main()
{
printSizeInKBorMB(2096128);
return 0;
}
다른방법으로 아래와 같은 방법이 있다. 같은 결과를 도출한다.
#include <stdio.h>
int main()
{
float val_f = 3.141592;
int val_i;
int val_d;
printf("%d.%d\n", (int)val_f, (int)((val_f - (int)val_f) * 10000));
return 0;
}
'임베디드 개발 > 펌웨어' 카테고리의 다른 글
Analog Multiplexer/Demultiplexer (0) | 2023.03.31 |
---|---|
CAN FD, TDC (Transmitter Delay Compensation) (0) | 2023.03.31 |
NTP 서버에서 시간 받아오기 (0) | 2023.03.31 |
FatFs, f_getfree(), f_readdir() 드라이브 여유 공간/사용 공간 확인 (0) | 2023.03.31 |
FPGA IP (Intellectual Property) Core (0) | 2023.03.31 |