본문 바로가기
임베디드 개발/펌웨어

소수점이하 값 정수형으로 얻는법

by eteo 2023. 3. 31.

 

소수점 이하 값을 정수형으로 얻으려면, 원하는 소수점 자리수만큼 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;
}