Câu trả lời:
Không có sự khác biệt trong PHP. float
, double
hoặc real
là cùng một kiểu dữ liệu.
Ở mức C, mọi thứ được lưu trữ dưới dạng a double
.
Kích thước thực vẫn phụ thuộc vào nền tảng.
Xem hướng dẫn để biết thêm chi tiết:
http://www.php.net/manual/en/language.types.float.php
function some( float $num){}
, khi tôi sử dụng some(17.23)
nó ném lỗi nghiêm trọng một số () phải là một thể hiện của float, double nhất định,
real
trong php cho đến nay.
is_real
chức năng, với là bí danh của is_float
...; )
Đối với PHP, chúng giống nhau. http://www.php.net/manual/en/language.types.float.php :
Số dấu phẩy động (còn được gọi là "số thực", "số kép" hoặc "số thực") có thể được chỉ định bằng bất kỳ cú pháp nào sau đây: [...]
Phần khó hiểu là tại sao gettype (dù sao thì bạn cũng không nên sử dụng) trả về "double" thay vì "float". Câu trả lời là http://de2.php.net/manual/en/ Chức năng.gettype.php :
"double" (vì lý do lịch sử, "double" được trả về trong trường hợp float chứ không chỉ đơn giản là "float")
Đối với PHP 7.0.6 trên Windows, so sánh lệnh này mà không có xdebug:
$ php -r 'var_dump(28.4);'
float(28.4)
và với xdebug:
$ php -r 'var_dump(28.4);'
Command line code:1:
double(28.4)
Lưu ý rằng điều này chỉ thay đổi đầu ra var_dump (), nhưng không thay đổi việc quản lý bộ nhớ thực tế.
Điều này có thể giải quyết một số lo ngại tại sao bạn thấy double
thay vì float
hiển thị trong var_dump ở một số máy khác.
Ngoài ra, có hoặc không có xdebug, gettype
vẫn trả về string(6) "double"
.
Trong PHP 7.0.14
function test(double $a) {
var_dump($a);
}
test(2.2111);
Trả về "Lỗi nghiêm trọng: Lỗi loại chưa được giải quyết: Đối số 1 được chuyển đến test () phải là một trường hợp của double, float đã cho".
function test(float $a) {
var_dump($a);
}
test(2.2111);
In 2.2111 ra màn hình.