컴퓨터는 부동 소수를 이진법을 사용하여 표기한다. 그러나 1과 10 사이에는 수 많은 부동소수가 존재하지만, 컴퓨터의 이진법으로는 이러한 수많은 10진수 부동 소수를 다 표현 할 수 없다. 따라서 컴퓨터는 부동소수를 근사값으로 부동소수를 표현한다.
부동소수를 근사값으로 사용하기에 산술 결과에서 오차가 발생한다.
>>> 0.1 + 0.2
0.30000000000000004
예를 들어 0.1과 0.2를 더하면 0.3이 아닌 0.30000000000000004으로 출력된다.
10진수 부동소수로 표현으로는 정확히 0.1과 0.2를 컴퓨터에서 표현하지 못하기 때문에 근사값을 사용한다. 이러한 근사값의 사용으로 두 부동소수를 더하였을때 약간의 오차가 발생한다.
>>> 1 / 10
0.1
위의 1 / 10의 결과로 0.1이 나왔지만 이 역시 반올림한 근사값이다. 이진법에서 1 /10은 무한히 반복되는 소수이고 컴퓨터의 메모리는 한정적이기 때문에 특정 비트에서 멈추고 근사값으로 표현한다.
이러한 부동소수의 오차는 파이썬 뿐만 아니라 부동소수를 지원하는 다른 여러 언어에서도 발견할 수 있다.
파이썬에는 부동소수의 반올림한 값을 반환하는 내장 함수인 round()함수가 있다.
파이썬에서 지원하는 내장 함수인 round() 함수의 형태는 다음과 같다.
round(number, [n])
여기서 number에는 부동소수가 오고 n은 생략이 가능하며 생략시 가장 근접한 근사값을 돌려준다.
>>> round(3.141592)
3
n에 자연수 입력시 소수점 n자리까지 반올림한 부동소수를 반환한다.
>>> round(3.141592, 2)
3.14
n에 음수도 가능하다. 음수를 입력하면 10의 절댓값 n승자리까지 반올림한 수를 반환한다.
>>> round(31.41592, -1)
30.0