실수형


실수는 정수(Integer)의 개념보다 더 큰 수학적 범위를 갖는 자료형입니다. 정수와 달리 소수점을 포함하는 실수 데이터를 보관하고 가공할 수 있으며, 지수 표기법을 통해 아주 작거나 아주 거대한 숫자 표현도 가능합니다.

Float vs Integer Concept Cartoon

그림: 쪼개지지 않는 온전한 사과 개수(정수 = 3)와 소수점 단위로 쪼갤 수 있는 사과 개수(실수 = 3.5) 비교

실수 데이터


실수는 정수와 달리 데이터를 표현하는데 있어서 변수의 bit를 모두 숫자로 표현을 하지 않습니다. 숫자 부분과 지수를 표현하는 부분으로 나누어 처리합니다.

또한 실수는 컴퓨터의 표현의 제한으로 큰 수의 경우 숫자의 정밀도는 제한적일 수 있습니다. 큰 수를 사용하기 위해서 별도의 알고리즘이 필요로 합니다. PHP는 IEEE 754 형식을 따라 부동 소수점을 표현합니다.

IEEE 754는 1.11e-16의 반올림으로 인해 최대 상대 오차가 발생할 수 있습니다. 기본이 아닌 산술 연산은 더 큰 오류가 발생할 수 있습니다. 물론 여러 작업이 혼합 될 때 오류를 고려해야 연산을 해야 합니다.

또한 기수 10의 부동 소수점 숫자로 정확하게 표현할 수 있는 유리수 (예 : 0.1 또는 0.7)는 가수의 크기에 관계없이 내부적으로 사용되는 2 진수의 부동 소수점 숫자와 정확히 일치하지 않습니다.

따라서 정밀도를 잃지 않고 내부 바이너리로 변환 할 수 없습니다. 예를 들어 floor ((0.1 + 0.7) * 10)는 내부 표현이 7.999999999999911181과 같기 때문에 일반적으로 예상되는 8 대신 7을 반환합니다.

실수는 시스템 환경에 따라 표현을 할 수 있는 수는 차이가 있습니다. 64bit 환경에서 최대 표현 값은 ~1.8e308 입니다.


실수 변수


실수 변수는 $변수에 실수 값을 대입하는 것으로 쉽게 저장을 할 수 있습니다.

문법
$a = 1.234; 
$b = 1.2e3; 
$c = 7E-10;

다음 예제는 실수변수를 화면에 출력하는 예제 입니다.

예제 파일 float-01.php

<?php
	$x = 10.365;
	var_dump($x);
?> 

결과화면

float(10.365) 

다은 예제는 각도의 라디안 값 계산하는 실수형 예제 입니다.

예제 파일 float-02.php

<?php
	const PI = 3.14;

	$deg = 30;
	$rad = $deg * PI / 180.0;
	printf("DEG = %d, RAD = %f", $deg, $rad);
?>

결과화면

DEG = 30, RAD = 0.523333


실수 확인


PHP는 생성한 변수가 실수변수를 확인할 수 있는 is_float()이라는 내부함수를 제공합니다.

관련함수
bool is_float ( mixed $var )

매개변수값으로 변수를 전달하면 변수의 오브젝트 타입 여부를 논리값 형태로 반환합니다.

예제 파일 float-03.php

<?php
var_dump( is_float(27.25) );
var_dump( is_float('abc') );
var_dump( is_float(23) );
var_dump( is_float(23.5) );
var_dump( is_float(1e7) );  //Scientific Notation
var_dump( is_float(true) );
?> 

결과

bool(true)
bool(false)
bool(false)
bool(true)
bool(true)
bool(false)

위의 예제는 나열된 데이터들이 실수형 데이터 타입인지를 확인하는 예입니다.


실수 형변환


PHP에서는 변수에 실수 값을 저장할 때 변수의 타입은 실수형이 됩니다.

형변환이라는 것은 변수에 값을 입력할 때 값 앞에 변수의 형태를 미리 지정하여 저장하는 방법입니다.

예제 파일 float-04.php

<?php
	// 실수값을 입력하면 변수는 실수 입니다.
	$pi = 3.14;
	var_dump( $pi );
	echo "pi = $pi<br>";

	// 정수로 형변환 합니다.
	$a = (int)5.14;
	var_dump( $a );
	echo "a = $a<br>";

	// 더블형으로 형변환 합니다.
	$b = (double)3.14;
	var_dump( $b );
	echo "b = $b<br>";

	// 문자열로 형현환 합니다.
	$b = (string)3.14;
	var_dump( $b );
	echo "b = $b<br>";
?> 

결과

float(3.14) pi = 3.14
int(5) a = 5
float(3.14) b = 3.14
string(4) "3.14" b = 3.14

위의 예제는 형변환을 실험하는 예입니다. 형변환을 키워드를 이용하여 데이터의 값의 형을 바꿀 수 있습니다.


소수점 처리


실수형 수는 소수점을 포함하고 있습니다. 소수점이 있을 경우 버림, 올림, 반올림 내장 함수를 통해 계산할 수 있습니다.

|관련함수| 소수점 이하 올림

float ceil ( 실수값 )

ceil() 함수는 입력된 실수값의 소수점 이하를 올림 처리한 값을 반환합니다.

|관련함수| 소수점 이하 버림

mixed floor ( 실수값 )

floor() 함수는 입력된 실수값의 소수점 이하를 버림 처리한 값을 반환합니다.

|관련함수| 소수점 이하 반올림

float round (실수값, 자릿수)

round() 함수는 입력된 실수값의 이하 반올림 처리한 값을 반환합니다.

예제 파일 float-05.php

<?php
	// 올림
	echo ceil(4.3);    // 5
	echo ceil(9.999);  // 10
	echo ceil(-3.14);  // -3

	// 버림
	echo floor(4.3)."<br>";   // 4
	echo floor(9.999)."<br>"; // 9
	echo floor(-3.14)."<br>"; // -4

	// 반올림 처리
	echo round(3.4)."<br>";         // 3
	echo round(3.5)."<br>";         // 4
	echo round(3.6)."<br>";         // 4
	echo round(3.6, 0)."<br>";      // 4

	// 소수점 자리 반올림
	echo round(1.95583, 2)."<br>";  // 1.96
	echo round(5.045, 2)."<br>";    // 5.05
	echo round(5.055, 2)."<br>";    // 5.06

	// 소수점 위3자리에서 반올림
	echo round(1241757, -3)."<br>"; // 1242000
	
?>

결과

510-34
9
-4
3
4
4
4
1.96
5.05
5.06
1242000

위의 예제는 실수의 버림, 올림, 반올림에 대한 처리 예입니다.


서브목차