[PHP] 부동소숫점 연산을 위한 float 값 구하기

[PHP] 부동소숫점 연산을 위한 float 값 구하기

PHP 뿐만 아니라 다른 언어에서도 부동소숫점 처리는 골치가 아픕니다. 소숫점의 경우 내부에서 2진수로 연산되기 때문에 정확히 떨어지지 않는 값이 만들어집니다. 때문에 오차가 생기기도 하구요.

이번 프로젝트에서 통화 수정 작업을 거치면서 유로나 달러의 경우 센트 단위의 소수점 연산을 하게 되었는데 기본 내장 함수로는 정확한 연산이 이루어지지 않았습니다.

저같은 경우 정확한 연산을 위해 부동소수점의 소숫점을 없애고 정수로 계산을 한 뒤에 소수점을 지정해주는 방법을 사용합니다. 함수를 만들어 보았는데 심플하면서 쓸만합니다.

// value : float값, digit : 소수점 자릿수
function toFixed($value, $digit = 0)
{
	return fixedPos($value) * numFloor(abs($value), $digit);
}

function numFloor($value, $digit)
{
	return floor($value * pow(10, $digit)) / pow(10, $digit);
}

function fixedPos($n = 1)
{
	if ($n > 0) {
		return 1;
	}else{
		return -1;
	}
}

사용 방법은 toFixed(19.24, 2); 와 같이 사용하면 됩니다.

%d 블로거가 이것을 좋아합니다: