프로그래밍/알고리즘

C언어 소수 정수의 반올림

콘파냐 2013. 5. 16. 13:57
반응형

C언어의 예를들자

C언어의 자리수관련 알고리즘이 몇가지있다.

floor(double a) 함수는 소수자리수를 잘라버린다.

수학의 가우스함수도 소수자리를 자른다.

ceil(double a) 함수는 소수자리수를 무조건 올려버린다.

그럼 반올림은 어떻게 계산할까..

생각해보자.

 

소수1자리 에서 반올림하려면 어떻게할까.

0.5를 원래의 수에 더한다음 floor 함수를 쓰면 어떻겠는가?

괜찮을 듯 싶다.

그럼 소수 두째짜리에서 반올림 해보자.

기본적으로 서식지정자는 반올림을 해준다.

괜히 머리아프게 하지말자...

그럼 수를 버리고싶다면 어떻게할까...

3.35인데 소수 둘째짜리를버리고 싶다..

어떻게할까.

10을 곱하고 floor() 함수를 쓴수 다시 10으로 나눈다.

괜찮을듯 싶다.

math 함수를 쓴다는게 좀 부담이다. 그럼 10을 곱한수 정수형으로 캐스팅한후 다시 더블형으로 캐스팅해서 10으로 나눈다. 괜찮을듯 싶다.

floor 함수는 그냥 정수형 캐스팅으로 처리하면 되는건가? 괜찮을 듯 싶다.

 

 double a;
 a= 3.36;
 a=a*10;
 a=(int)a;
 a=(double)a;
 a=a/10;
 printf("%.1lf", a);

 

이런식으로하면 된다.

 

이젠 정수를 살펴보자.

1의 자리에서 반올림하고 싶으면

5를 더한후 10으로 나눈뒤 다시 10을 곱하자.

10의자리에서 반올림하고 싶으면

50을 더한수 100으로 나눈뒤 다시 100을 곱하자.

정말 쉽다.

반응형