ฉันมีรหัสนี้
$vad = 1.1;
print gettype($vad);
var_dump($vad);
สิ่งนี้จะส่งออก:
double
float(1.1)
ดังนั้นมันจึงเป็น double หรือ float ใน php?
ฉันมีรหัสนี้
$vad = 1.1;
print gettype($vad);
var_dump($vad);
สิ่งนี้จะส่งออก:
double
float(1.1)
ดังนั้นมันจึงเป็น double หรือ float ใน php?
คำตอบ:
ไม่มีความแตกต่างใน PHP float
, double
หรือreal
เป็นประเภทข้อมูลเดียวกัน
ที่ระดับ C ทุกอย่างจะถูกจัดเก็บเป็นไฟล์double
.
ขนาดจริงยังขึ้นอยู่กับแพลตฟอร์ม
ดูคู่มือสำหรับรายละเอียดเพิ่มเติม:
http://www.php.net/manual/en/language.types.float.php
function some( float $num){}
เมื่อฉันใช้some(17.23)
มันจะทำให้เกิดข้อผิดพลาดร้ายแรงบางอย่าง () ต้องเป็นอินสแตนซ์ของการลอยตัวให้สองครั้ง
real
ใน php
is_real
หน้าที่ด้วยคือนามแฝงของis_float
... ; )
สำหรับ PHP ก็เหมือนกัน http://www.php.net/manual/en/language.types.float.php :
ตัวเลขทศนิยม (หรือที่เรียกว่า "ลอย" "คู่" หรือ "จำนวนจริง") สามารถระบุได้โดยใช้ไวยากรณ์ต่อไปนี้: [... ]
ส่วนที่ทำให้สับสนคือทำไม gettype (ซึ่งคุณไม่ควรใช้อยู่ดี) ส่งคืน "double" แทน "float" คำตอบคือhttp://de2.php.net/manual/en/function.gettype.php :
"double" (สำหรับเหตุผลทางประวัติศาสตร์ "double" จะถูกส่งกลับในกรณีของ float ไม่ใช่แค่ "float")
เมื่อ PHP 7.0.6 บน Windows เปรียบเทียบคำสั่งนี้โดยไม่มี xdebug:
$ php -r 'var_dump(28.4);'
float(28.4)
และด้วย xdebug:
$ php -r 'var_dump(28.4);'
Command line code:1:
double(28.4)
โปรดทราบว่าสิ่งนี้จะเปลี่ยนแปลงเฉพาะเอาต์พุต var_dump () แต่ไม่ใช่การจัดการหน่วยความจำจริง
สิ่งนี้อาจช่วยคลายข้อกังวลบางประการที่คุณเห็นdouble
แทนที่จะfloat
แสดงใน var_dump ในเครื่องอื่น ๆ
นอกจากนี้ยังมีหรือไม่มี xdebug, ยังคงส่งกลับgettype
string(6) "double"
ใน PHP 7.0.14
function test(double $a) {
var_dump($a);
}
test(2.2111);
ส่งคืน "ข้อผิดพลาดร้ายแรง: Uncaught TypeError: อาร์กิวเมนต์ 1 ที่ส่งไปยังการทดสอบ () ต้องเป็นอินสแตนซ์ของ double, float given"
function test(float $a) {
var_dump($a);
}
test(2.2111);
พิมพ์ 2.2111 ไปที่หน้าจอ