ฉันเขียนรหัสนี้:
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
;