ฉันเขียนรหัสนี้:
float b = 3.6;
และฉันได้รับสิ่งนี้:
ข้อผิดพลาด: ปัญหาการคอมไพล์ที่ยังไม่ได้แก้ไข:
ประเภทไม่ตรงกัน: ไม่สามารถแปลงจากคู่เป็นลอยได้
ทำไม? นิยามของfloatอะไร?
ฉันเขียนรหัสนี้:
float b = 3.6;
และฉันได้รับสิ่งนี้:
ข้อผิดพลาด: ปัญหาการคอมไพล์ที่ยังไม่ได้แก้ไข:
ประเภทไม่ตรงกัน: ไม่สามารถแปลงจากคู่เป็นลอยได้
ทำไม? นิยามของfloatอะไร?
fในลิเทอรัล') ในขณะที่อีกคำถามถามว่าทำไมคุณต้องเพิ่มไฟล์f. แม้ว่าจะเกี่ยวข้องกัน แต่ก็ไม่ซ้ำกัน
คำตอบ:
ใน Java เมื่อคุณพิมพ์เลขฐานสิบเป็นเลขฐานสิบ3.6จะถูกตีความเป็นdouble. doubleเป็นจุดลอยตัว IEEE 754 ที่มีความแม่นยำ 64 บิตในขณะที่floatเป็นจุดลอยตัว IEEE 754 ที่มีความแม่นยำ 32 บิต เนื่องจาก a floatมีความแม่นยำน้อยกว่า a doubleจึงไม่สามารถทำการแปลงโดยปริยายได้
หากคุณต้องการที่จะสร้างลอยคุณควรจะจบจำนวนของคุณด้วยf(เช่น: 3.6f)
สำหรับคำอธิบายเพิ่มเติมโปรดดูที่ดั้งเดิมชนิดข้อมูลนิยามของ Java กวดวิชา
ทำมัน
float b= 3.6f;
ลิเทอรัลจุดลอยตัวเป็นประเภทลอยหากต่อท้ายด้วยตัวอักษร ASCII F หรือ f; มิฉะนั้นประเภทจะเป็นสองเท่าและสามารถเลือกต่อท้ายด้วยตัวอักษร ASCII D หรือ d
สิ่งนี้คือตัวเลขทศนิยมมีค่าเริ่มต้นเป็นสองเท่า และเนื่องจาก double ไม่พอดีกับ float คุณจึงต้องบอกอย่างชัดเจนว่าคุณตั้งใจกำหนด float ไปกับ:
float b = 3.6f;
ใน JAVA ค่าต่างๆเช่น:
จะถือว่าเป็นคู่และไม่ลอย
คุณยังสามารถแคสต์เพื่อแก้ปัญหาได้:
float b = (float) 3.5;
วิธีแก้ปัญหาอื่น:
float b = 3.5f;