Sự khác biệt giữa float và double trong php?


117

Tôi có mã này

$vad = 1.1;

print gettype($vad);

var_dump($vad);

điều này sẽ xuất ra:

double
float(1.1) 

Vậy nó là double hay float trong php?

Câu trả lời:


151

Không có sự khác biệt trong PHP. float, doublehoặc reallà 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


chắc chắn với điều đó? có một số bộ nhớ sử dụng khác nhau về nó?
TheCrazyProfessor

2
Tôi có chức năng 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,
NaveenDA

1
@NaveenDA Phiên bản nào của PHP? Trước PHP 7.0, các gợi ý về kiểu vô hướng không có sẵn và thay vào đó sẽ được hiểu là tên lớp. Điều đó trông giống như những gì đang diễn ra ở đó.
Ken Wayne VanderLinde

chỉ làm rõ rằng không có loại dữ liệu nào như vậy realtrong php cho đến nay.
Muhammad Sheraz

@MuhammadSheraz Nhưng có một is_realchức năng, với là bí danh của is_float...; )
Macmade

21

Đố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")


10

Đố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ớ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 doublethay vì floathiển thị trong var_dump ở một số máy khác.

Ngoài ra, có hoặc không có xdebug, gettypevẫn trả về string(6) "double".


4

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.


8
Chỉ floatlà một gợi ý kiểu hợp lệ ( xem ). Khi bạn gõ doublethay vào đó, nó được coi là một tên lớp, và thông dịch viên ném ngoại lệ, bởi vì nó hy vọng một biến với thể hiện của các doublelớp
AterLux
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.