minjeong-oh
기록
minjeong-oh
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • ML & Neural Net (3)
    • ◼️GNN (1)
    • ◼️시계열 (1)
    • ◼️추천시스템 (0)
    • ◼️수학 (3)
    • Data Engineer (2)
    • ◼️Spark (1)
    • ◼️Kafka (1)
    • ◼️Elestic Search (0)
    • ◼️Redis (0)
    • ◼️ClickHouse (1)
    • Programming Language (4)
    • ◼️React (0)
    • ◼️Git (1)
    • ◼️Python (1)
    • ◼️C++ (33)
    • ◼️Fortran 99 (2)
    • ◼️OpenGL (7)
    • ◼️MFC (35)
    • ◼️Flutter (46)
    • ◼️Kotlin (1)
    • ◼️Android (1)
    • ◼️Java (1)
    • ◼️C (4)
    • Development (0)
    • ◼️디자인패턴 (0)
    • ◼️네트워크 (2)
    • ◼️인증 (1)
    • Computer Science (4)
    • 알고리즘 문제풀이 (12)
    • SQL 고득점 Kit 문제풀이 (8)
    • 취업준비 (0)
    • Notion 정리 글 (1)
    • Article Scrap (12)
      • Careerly - Q&A (7)
      • Careerly - Post (2)
    • 기타 등등 (16)

블로그 메뉴

  • 글쓰기
  • 홈
  • 태그
  • 방명록
  • 편집

공지사항

인기 글

태그

  • NextJSSwagger
  • API문서정리
  • AI배워야하나
  • 구조체매개변수
  • 리눅스파티션
  • 그램업그레이드
  • 이것이C++이다책참고
  • 구조체배열포인터
  • OpenGL회전
  • 티스토리폰트배경색없애기
  • 이차원구조체배열포인터
  • SpringBootSwagger
  • 그램풀스팩업그레이드
  • mfc
  • 19년식그램램장착
  • 인공지능개발자
  • 19년식그램SSD장착
  • GSLB
  • kafka구축
  • hello테마

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
minjeong-oh

기록

◼️C++

[C++] 소숫점 아랫자리 버리기. 정확하지 않은 실수 연산 해결하기

2023. 9. 4. 15:38

Issue

 

지정된 소숫점 아랫자리를 버리고 출력하려고 했다.

0.60000을 둘째짜리까지 출력하려면 0.60이 나와야하는데 0.59가 나와버렸다.

정확하지않은 실수 자료형 때문에 생긴 문제같다.  


Solution

double n: 연산할 숫자

int valid 변수: 버릴 지점.

double multiplier = pow(10, valid);
result = floor(n * multiplier) / multiplier;

여기서 문제가

n =0.60000 이고 mutiplier =100 이면

n * multiplier을 하면  599.999가 나온다는게 문제다. 

 

실수 연산에서 문제가 생기는 것으로 보고

n이 정확한 0.6이 아니라서 생기는 문제라고 판단했다. 

아주 뒷자리까지 출력해보면 0.60000000007 이렇게 되어있을거다.

 

그래서 정확한 값으로 만들어주기위해 정수를 문자열로 변환하면서 뒤를 잘라내는 작업을 한번 거쳤다.

그렇게 하니 연산 결과가 정상적으로 나왔다.

CString str;
str.Format(_T("%.6f"), v);  //소숫점 6자리까지만 떼오기
v = _ttof(str);
double multiplier = pow(10, valid);
v = floor(v * multiplier) / multiplier;

 

'◼️C++' 카테고리의 다른 글

[C++] 함수다중정의(오버로딩), 템플릿 함수  (0) 2023.09.05
[C++] 디폴트 매개변수  (0) 2023.09.05
[C++] 범위 기반 for 문 for(auto n : nList)  (0) 2023.08.31
[C++] 참조자 형식 int &n = a;  (0) 2023.08.31
[C++] 메모리 동적 할당. new(), delete()  (0) 2023.08.31

    티스토리툴바