부동소수점 연산은 단순 산술비교를 하면 절대 안됨.
이전에 PHP에서도 한 번 당한적이 있는데 홀랑 까먹고 또 실수함.
부동소수점 비교는 epsilon 보정을 하는 비교 함수를 만들어서 사용해야 함.
console.log(0.1 + 0.2);
// => 0.30000000000000004
// PHP에서 var_dump()하면 float(0.3) 나와서 되게 헷갈리는데 그나마 이건 그대로 출력해줘서 다행
console.log(0.1 + 0.2 == 0.3);
// => false
// 이런 함수로 비교해야 함
function isSame(a, b, epsilon)
{
if (!epsilon) epsilon = 0.000001;
return Math.abs(a - b) < epsilon;
}
console.log(isSame(0.1+0.2, 0.3));
// 이건 true
웃기는 만화도 하나 찾았다...
http://www.smbc-comics.com/index.php?db=comics&id=2999
참조
부동소수점 포맷 : https://en.wikipedia.org/wiki/Double-precision_floating-point_format
IEEE 754 : https://en.wikipedia.org/wiki/IEEE_754#Basic_formats
'JavaScript' 카테고리의 다른 글
[JavaScript] window.ShowModalDialog가 사라진다. (0) | 2014.05.11 |
---|---|
[JavaScript] cross-domain localStorage (0) | 2014.04.17 |
[JavaScript] 문자열을 여러 라인으로 나눠서 정의하기 (multiline) (0) | 2014.04.08 |
[JavaScript] jQuery - 전체 document의 element 다 가져오기 (select, top.document, element) (0) | 2014.01.07 |
[JavaScript] 날짜를 YYYYmmdd 형태로 반환하는 함수 (Date, format, yyyymmdd) (4) | 2013.12.20 |