float ใน Java คืออะไร?


103

ฉันเขียนรหัสนี้:

float b = 3.6;

และฉันได้รับสิ่งนี้:

ข้อผิดพลาด: ปัญหาการคอมไพล์ที่ยังไม่ได้แก้ไข: 
    ประเภทไม่ตรงกัน: ไม่สามารถแปลงจากคู่เป็นลอยได้

ทำไม? นิยามของfloatอะไร?



1
@Sneftel นั่นไม่ใช่คำถามที่ซ้ำกัน คำถามนี้ถามว่าทำไมจึงไม่รวบรวม (ซึ่งคำตอบคือ 'คุณต้องเพิ่ม a fในลิเทอรัล') ในขณะที่อีกคำถามถามว่าทำไมคุณต้องเพิ่มไฟล์f. แม้ว่าจะเกี่ยวข้องกัน แต่ก็ไม่ซ้ำกัน
Mark Rotteveel

ดูmeta.stackexchange.com/questions/217401/… . คำตอบของคำถามที่เชื่อมโยงคือคำตอบสำหรับคำถามนี้
Sneftel

คำตอบ:


180

ใน Java เมื่อคุณพิมพ์เลขฐานสิบเป็นเลขฐานสิบ3.6จะถูกตีความเป็นdouble. doubleเป็นจุดลอยตัว IEEE 754 ที่มีความแม่นยำ 64 บิตในขณะที่floatเป็นจุดลอยตัว IEEE 754 ที่มีความแม่นยำ 32 บิต เนื่องจาก a floatมีความแม่นยำน้อยกว่า a doubleจึงไม่สามารถทำการแปลงโดยปริยายได้

หากคุณต้องการที่จะสร้างลอยคุณควรจะจบจำนวนของคุณด้วยf(เช่น: 3.6f)

สำหรับคำอธิบายเพิ่มเติมโปรดดูที่ดั้งเดิมชนิดข้อมูลนิยามของ Java กวดวิชา


41

ทำมัน

float b= 3.6f;

ลิเทอรัลจุดลอยตัวเป็นประเภทลอยหากต่อท้ายด้วยตัวอักษร ASCII F หรือ f; มิฉะนั้นประเภทจะเป็นสองเท่าและสามารถเลือกต่อท้ายด้วยตัวอักษร ASCII D หรือ d


มีวิธีตรวจสอบว่าสตริงมีค่าลอยเท่านั้นหรือไม่?
MasterJoe

13

สิ่งนี้คือตัวเลขทศนิยมมีค่าเริ่มต้นเป็นสองเท่า และเนื่องจาก double ไม่พอดีกับ float คุณจึงต้องบอกอย่างชัดเจนว่าคุณตั้งใจกำหนด float ไปกับ:

float b = 3.6f;

8

ใน JAVA ค่าต่างๆเช่น:

  1. 8.5
  2. 3.9
  3. (และอื่น ๆ .. )

จะถือว่าเป็นคู่และไม่ลอย

คุณยังสามารถแคสต์เพื่อแก้ปัญหาได้:

float b = (float) 3.5;

วิธีแก้ปัญหาอื่น:

float b = 3.5f;

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.