프로그래머스 0단계 문제 중 '두 수의 나눗셈' 문제를 풀다가 궁금해진 내용이다.
math 모듈의 올림, 내림, 반올림 메소드들을 비교하고, 내림 메소드를 int() 함수와 비교해보자.
ceil() 메소드가 있다.
import math
math.ceil(3.14) # 4
math.ceil(-3.14) # -3
floor() 와 trunc() 가 있다.
floor()import math
math.floor(3.14) # 3
math.floor(-3.14) # -4
floor() 는 무조건 아래를 향해 내림한다.
trunc()import math
math.floor(3.14) # 3
math.trunc(-3.14) # -3
trunc() 는 내림을 할 때 0으로 향한다. 즉, int() 와 같은 결과를 반환하는 함수이다.
math.trunc() vs int()int()와 같이 형 변환을 하는 경우 새로운 객체를 생성한다.math.trunc() 도 마찬가지로 float에서 int로 형 변환을 해주는 함수로, 새로운 객체를 생성한다.int() 를 사용하는 것이 좋지 않을까 싶다.math.trunc() 가 10% 정도 빠르다고 한다. https://stackoverflow.com/questions/52223610/when-is-it-better-to-use-trunc-instead-of-int-to-convert-floating-type-numbe)python의 형 변환
C언어와 비교해보면, 형 변환으로 정수와 같은 원시 타입을 반환하는 경우, C언어는 원시 타입을 생성하지만 python은 객체를 생성한다.
원시 타입과 달리 객체는 해당 객체에 대한 메소드, 헤더 값 등의 추가로 생성되는 값들이 있기 때문에 메모리 소요도 더 크고 형 변환하는 시간도 더 오래 걸린다. 따라서 python에서 형 변환은 지양할 수 있으면 지양해야 한다.
round() 내장 함수가 있다.
round(3.1415) # 3
round(3.1415, 2) # 3.1
round(2131.415, -1) # 2130.0
round(2131.415, -2) # 2100.0
round에서 두 번째 인자가 음수( 꼴)이면 (소숫점 기준) 의 자리에서 반올림을 한다.
즉, 정수 부분의 자리에서 반올림하는 것이다.
예를 들어 의 -1자리(일의 자리)에서 반올림하면 2130.0 된다.
마찬가지로, 의 -2자리(십의 자리)에서 반올림하면 2100.0 된다.
round()는 사사오입 원칙을 따른다.
반올림할 자리의 수가 5일 때, 앞자리의 숫자가 짝수면 내림하고 홀수면 올림한다.
round(4.5) # 4
round(3.5) # 4