부동 소수점 연산

개발을 하다 보면 수를 이용한 연산이 필요한 경우가 종종 있는데, 소수를 이용한 연산에서 항상 정확한 값을 출력하지는 않는다.
이는 부동 소수점 연산에 의해 발생한 것이며 다음과 같은 경우에서 확인이 가능하다.

1
2
var x = 0.2 + 0.1;         // 0.30000000000000004
var y = 0.1 * 0.1; // 0.010000000000000002

아래와 같이 소수 간에 직접 연산이 일어나지 않도록 하여 올바른 값을 얻을 수는 있지만,
연산이 많아질수록 매우 복잡해질것이므로 별로 바람직해 보이지는 않는다.

1
2
var x = (0.2 * 10 + 0.1 * 10) / 10 // 0.3
var y = 0.1 * 1 / 10 // 0.01

이를 해결하기 위해 많은 훌륭한 개발자들이 오픈소스를 제공하고 있으며 이를 이용하면 간결하게 처리가 가능하다.
https://github.com/MikeMcl/bignumber.js/

1
2
3
4
5
var x = new BigNumber(0.2)
x = x.plus(0.1) // 0.3

var y = new BigNumber(0.1)
y = y.multipliedBy(0.1) // 0.01
Share Comments