echo76
20
2020-09-14 00:59:24
1
221

c 강제 형변환 연산 문제


제가 원하던 출력은 실수의 n번째 자리 뒤의 소수점을 반올림한 값을 출력하는 것이었습니다.

#include<stdio.h>
#include<math.h>

int main(void)
{
	double num;
	int pos1;
	double fin;
	int pos2;

	printf("실수, 정수 입력: ");
	scanf("%lf", &num);
	scanf("%d", &pos1);
	
	pos2 = pow(10, pos1);

	printf("%f<%d>", num, pos1);
	num = num * pos2 + 0.5;

	fin = (int)num;
	fin = num / pos2;

	printf(" => %f", fin);
	return 0;
}

이렇게 마지막에 형변환을 하였는데

실수, 정수 입력: 1.678
2
1.678000<2> => 1.683000

이렇게 0.003이 남은 채로 출력됩니다.


경고 C4244 '=': 'double'에서 'int'(으)로 변환하면서 데이터가 손실될 수 있습니다.

경고 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead.

To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

이 두가지 경고말고는 오류가 없는데 왜 이렇게 출력이 되는지 모르겠습니다.


지금 visual studio 2017 사용중이고 맨땅부터 배우는 중이라서 이해도가 거의 없는 상태입니다.

제가 참고한 사이트는 https://dojang.io/mod/page/view.php?id=493 입니다.



0
  • 답변 1

  • defult
    16k
    2020-09-14 01:09:34 작성 2020-09-14 01:10:13 수정됨

    프로그래밍에서 실수는 의도한 숫자대로 절대로 표현 안됩니다.

    특히나 타입캐스트를 사용한다면 더더욱 유의해야하고요.


    구글에서 부동소수점 오차 혹은 부동소수점 오류라고 검색하시면 여러가지 상황에대한 설명 보실수 있을겁니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.