ใน PHP การทดสอบค่าทศนิยมเพื่อความเท่าเทียมกันนั้นเป็นปัญหา เนื่องจาก PHP ล้มเหลวเมื่อตรวจสอบว่าจำนวนทศนิยมหนึ่งเท่ากับอีกจำนวนหนึ่งหรือไม่ แม้ว่าตัวเลขทศนิยมดูเหมือนจะมีค่าเท่ากัน แต่จริง ๆ แล้วไม่จำเป็นต้องเหมือนกัน ดังนั้นในบทความนี้จะแสดงให้เห็นถึงปัญหาที่เรากำลังเผชิญในการเปรียบเทียบเลขทศนิยมและขั้นตอนต่างๆ เพื่อหลีกเลี่ยงปัญหานี้
ตัวอย่าง
มาทดสอบกันโดยใช้ตัวอย่างง่ายๆ:
<ก่อน>เอาต์พุต:
a และ b ไม่เหมือนกัน
คำอธิบาย:
ในโค้ดนี้ เงื่อนไข else จะถูกดำเนินการแทนเงื่อนไข if แม้ว่า $a และ $b จะเหมือนกันก็ตาม เนื่องมาจากคุณลักษณะของค่าทศนิยมที่แสดงไว้ภายใน มาพูดถึงกรณีต่างๆ ใน PHP เพื่อหลีกเลี่ยงปัญหานี้แบบเรียลไทม์
กรณีที่ 1:
สาธิตการเปรียบเทียบค่าทศนิยมโดยใช้ผลต่างน้อยที่สุดในการคำนวณในระบบคอมพิวเตอร์
ตัวอย่าง:
<ก่อน>ผลลัพธ์:
จริง
คำอธิบาย:
ที่นี่เราใช้ตัวแปรจุดลอยตัวสองตัว val1 และ val2 ควบคู่ไปกับ epsilon จากนั้นเราจะนำความแตกต่างที่แน่นอนของตัวแปร (val1 และ val2) โดยใช้ฟังก์ชันดั้งเดิมที่ชื่อว่า abs() รหัสนี้จะให้ค่าสัมบูรณ์แก่เรา แต่คำถามคือทำไมเราจึงใช้ค่าสัมบูรณ์ คำตอบคือ เราจะเห็นได้ว่าทั้งสองค่ามีตัวเลขหลังทศนิยมเหมือนกันจนถึงค่าความแม่นยำ 5 ซึ่งยากสำหรับ PHP ในการวิเคราะห์การเปรียบเทียบ
กรณีที่ 2:
การใช้ฟังก์ชัน round()
<ก่อน>ผลลัพธ์:
บูล(จริง)
คำอธิบาย:
ที่นี่เราใช้ตัวแปรจุดลอยตัวสองตัว val1 และ val2 จากนั้น เรากำลังใช้ฟังก์ชันที่กำหนดไว้ล่วงหน้าที่ชื่อว่า round () ซึ่งปัดเศษค่าทศนิยมออกเป็นทศนิยมสองตำแหน่งแล้วเปรียบเทียบ เราใช้ฟังก์ชัน round() ที่กำหนดไว้ล่วงหน้าเพื่อให้ได้ผลลัพธ์ที่คาดหวังในวิธีที่ถูกต้อง