실수는 정수의 개념보다 한단계 더 큰 수학적 개념입니다. 실수는 정수와 달리 소수점을 포함하여 큰 수의 값을 표현할 수 있습니다. 또는 지수로 표기된 실수 값을 말합니다.
실수는 정수와 달리 데이터를 표현하는데 있어서 변수의 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
위의 예제는 실수의 버림, 올림, 반올림에 대한 처리 예입니다.