CodeGym /จาวาบล็อก /สุ่ม /คีย์เวิร์ด Java Float
John Squirrels
ระดับ
San Francisco

คีย์เวิร์ด Java Float

เผยแพร่ในกลุ่ม
ในช่วงหนึ่งของการพัฒนาเทคโนโลยีคอมพิวเตอร์ เห็นได้ชัดว่าหน่วยประมวลผลกลางจำเป็นต้องมีอุปกรณ์ฮาร์ดแวร์ในการประมวลผลตัวเลขทศนิยม ปัจจุบันสถาปัตยกรรมคอมพิวเตอร์ทั้งหมดสามารถทำงานได้อย่างมีประสิทธิผลกับตัวเลขดังกล่าว แน่นอนว่าในภาษาการเขียนโปรแกรม คุณไม่สามารถทำได้หากไม่มีประเภทข้อมูลที่เกี่ยวข้อง ข้อมูลจุดลอยตัวใน Java มีสองประเภท: float และ double คีย์เวิร์ด Java Floatกำหนดจำนวนจริงที่ใช้พื้นที่ 32 บิตในหน่วยความจำ เราจะพูดถึงตัวเลขดังกล่าวในบทความนี้

ตัวเลขจุดลอยตัว ตัวเลขจริงถูกเก็บไว้ในคอมพิวเตอร์อย่างไร?

ในการจัดเก็บจำนวนจริงในหน่วยความจำคอมพิวเตอร์ จะมีการจัดสรรบิตจำนวนหนึ่ง จำนวนจริงจะถูกจัดเก็บเป็นเครื่องหมาย (บวกหรือลบ) ตั๊กแตนตำข้าว และเลขชี้กำลัง แมนทิสซาและเลขชี้กำลังคืออะไร สามารถอธิบายได้ดีที่สุดพร้อมตัวอย่าง มวลโดยประมาณของดวงจันทร์คือ 7* 1,022 โดย 7 คือตั๊กแตนตำข้าว ส่วน 22 เป็นเลขชี้กำลัง เมื่อแสดงตัวเลขขนาดใหญ่หรือในทางกลับกัน หรือตัวเลขที่น้อยมากบนหน้าจอ คุณจะเห็นรายการเช่น 7E22 นี่คือจำนวนจุดลอยตัว และ 7 ในที่นี้คือตั๊กแตนตำข้าว และ 22 เป็นเลขยกกำลังหรือกำลังของ 10 สัญกรณ์นี้เรียกว่าสัญกรณ์เลขชี้กำลัง

คำหลัก Java float และคำหลัก Java Double

ค่าทศนิยม ( ตัวเลขทศนิยมหรือจำนวนจริง) ใน Java แสดงด้วยประเภทfloatและdouble เป็นคำหลักเหล่านี้ที่ใช้ในการจัดเก็บค่าจนถึงเครื่องหมายบางตัวหลังจุดทศนิยม doubleคือตัวเลขที่มีความแม่นยำสองเท่าซึ่งใกล้เคียงกับค่าที่กำหนดหรือได้รับจากการคำนวณมากที่สุด Java Doubleใช้สำหรับการคำนวณทางคณิตศาสตร์ใดๆ (สแควร์รูท, ไซน์, โคไซน์, ..) เช่นเดียวกับการคำนวณทั้งหมดที่ความแม่นยำเป็นสิ่งสำคัญ ชนิดข้อมูล floatใช้สำหรับประเภทจุดลอยตัวที่มีความแม่นยำน้อยกว่า มันถูกใช้งานน้อยมากเพื่อประหยัดหน่วยความจำ ด้านล่างนี้เรามีตารางที่มีข้อมูลหลักเกี่ยวกับ float และ double รวมถึงความแตกต่าง
ลอย สองเท่า
หลัก ทศนิยมเป็นค่าความแม่นยำเดียว มันเป็นค่าที่มีความแม่นยำสองเท่า
ขนาดเริ่มต้น 4 ไบต์ (32 บิต) 8 ไบต์ (64 บิต)
ค่าเริ่มต้น 0.0f 0.0
พิสัย จาก 1.4e–045 ถึง 3.4e+038 จาก 4.9e–324 เป็น 1.8e+308
ใช้เพื่ออะไร เพื่อประหยัดหน่วยความจำ เพื่อทำงานกับเศษส่วนได้อย่างแม่นยำ
ดังนั้น คีย์เวิร์ด Floatหมายถึงตัวเลข ซึ่งเป็นค่าความเที่ยงตรงเดียวที่บรรจุหน่วยความจำขนาด 32 บิตหรือ 4 ไบต์ ในโปรเซสเซอร์บางตัวการทำงานกับตัวเลขดังกล่าวจะเร็วกว่าและดังที่ได้กล่าวไปแล้วว่าจะใช้พื้นที่น้อยกว่าเมื่อเปรียบเทียบกับตัวเลขที่มีความแม่นยำสองเท่า อย่างไรก็ตาม เป็นไปไม่ได้ที่จะพูดด้วยความรวดเร็วอย่างชัดเจน สมมติว่าโปรเซสเซอร์สมัยใหม่บางตัวประมวลผลตัวเลขที่มีความแม่นยำเป็นสองเท่าได้เร็วกว่ามาก

Java Float และการประกาศสองครั้ง

คุณสามารถประกาศประเภทdouble ได้หลายแบบ ในลักษณะเดียวกับหมายเลขประเภทอื่นๆ:
double myDouble = 2.7;
อย่างไรก็ตาม หากคุณแสดงตัวเลขทศนิยมด้วยวิธีนี้ คอมไพลเลอร์จะต้องให้คุณเปลี่ยนประเภทของตัวเลขให้เป็นสองเท่า นี่เป็นตัวอย่างที่ไม่ถูกต้องของ ตัวแปร float :
public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14;
   }
}
นี่คือสิ่งที่จะเกิดขึ้นหากคุณเรียกใช้โปรแกรมนี้:
Error:(4, 25) java: incompatible types: possible lossy conversion from double to float
ความจริงก็คือมันไม่พึงปรารถนาที่จะใช้ตัวเลขลอยตัวและควรทำเพื่อประหยัดหน่วยความจำเท่านั้น เศษส่วนจำนวนจริงทั้งหมดใน Java จะเป็นสองเท่าตามค่าเริ่มต้น และไวยากรณ์ของภาษาก็เน้นย้ำสิ่งนี้ด้วย หากคุณต้องการทำงานกับประเภท float จริงๆ คุณต้องระบุให้ชัดเจนโดยใช้ f ปิดท้ายตัวเลข
public class FloatExample {
   public static void main(String[] args) {
//double and float variables
       double myDouble = 2.7;
       float myFloat = 3.14f;
   }
}
อย่างไรก็ตาม ตัวเลขทศนิยมและเลขคู่สามารถเขียนในรูปแบบเลขชี้กำลังได้
float myFloat2 = 2E22f;
double myDouble2 = 3e10;
หากคุณใช้ตัวเลขที่มากพอในการเป็นตัวแทน "ปกติ" Java จะแสดงตัวเลขเหล่านั้นทันทีในรูปแบบเลขชี้กำลัง มาดูตัวอย่างกัน:
public class FloatExample {
   public static void main(String[] args) {
//float variables
               float myFloatNumber1=2182818284590.45f;
               float myFloatNumber2=19822612787260.141592181f;
               System.out.println("myFloatNumber1 = " + myFloatNumber1);
               System.out.println("myFloatNumber2 = " + myFloatNumber2);
       System.out.println("myFloatNumber1 + myFloatNumber2 = " + myFloatNumber1 + myFloatNumber2);
           }
       }
ผลลัพธ์ของการทำงานของโปรแกรมนี้อยู่ที่นี่:
myFloatNumber1 = 2.1828183E12 myFloatNumber2 = 1.98226121E13 myFloatNumber1 + myFloatNumber2 = 2.1828183E121.98226121E13

ตัวอย่างเลขทศนิยมและเลขคู่แบบพิเศษ

มีตัวเลขทศนิยมพิเศษสามตัวในภาษา Java ซึ่งใช้เพื่อระบุการโอเวอร์โฟลว์และข้อผิดพลาด พวกเขาอยู่ที่นี่:
  • ค่าอนันต์เชิงบวกคือผลลัพธ์ของการหารจำนวนบวกด้วย 0 ซึ่งแสดงด้วยค่าคงที่Double.POSITIVE_INFINITYและFloat.POSITIVE_INFINITY

  • ค่าอนันต์เชิงลบคือผลลัพธ์ของการหารจำนวนลบด้วย 0 ซึ่งแสดงด้วยค่า คงที่ Double.NEGATIVE_INFINITYและFloat.NEGATIVE_INFINITY

  • NaN (ไม่ใช่ตัวเลข) แสดงถึงการคำนวณ 0/0 หรือการหารากที่สองของจำนวนลบ แสดงโดยค่าคงที่Double.NaNและFloat.NAN

นี่คือตัวอย่างของการใช้ตัวเลขจุดลอยตัวพิเศษเหล่านี้:
public class FloatExample {
   public static void main(String[] args) {
       int myInt = 1;
       float zero = 0.0f;
       double negZero = -0.0;
       double negativeInfinity = Double.NEGATIVE_INFINITY;
       double positiveInfinity = Float.POSITIVE_INFINITY;

       System.out.println(myInt / zero);
       System.out.println(myInt / negZero);
       System.out.println(zero == negZero);
       System.out.println(negativeInfinity * 0);
       System.out.println(positiveInfinity+negativeInfinity);

   }
}
ผลลัพธ์คือ:
อินฟินิตี้ -อินฟินิตี้ จริง น่าน น่าน

ความแม่นยำสองเท่าเพียงพอหรือไม่

ในความเป็นจริง แม้ว่าประเภท Doubleจะมีความแม่นยำสองเท่าแต่การใช้ตัวเลขทศนิยมในการคำนวณทางการเงิน ก็ไม่ใช่แนวคิดที่ดีที่สุด เนื่องจากข้อผิดพลาดในการปัดเศษเป็นสิ่งที่ยอมรับไม่ได้ ดังนั้นให้ลองแสดงผลของโปรแกรมต่อไปนี้บนหน้าจอ
public class FloatExample {
   public static void main(String[] args) {
       System.out. println( "2.0 - 1.1 = " + (2.0 - 1.1));
   }
}
คุณจะได้รับผลลัพธ์ดังต่อไปนี้:
2.0 - 1.1 = 0.8999999999999999
มันสมเหตุสมผลที่จะสรุปว่าผลลัพธ์จะเป็น 0.9 อย่างไรก็ตาม ข้อผิดพลาดดังกล่าวเป็นเรื่องปกติและเกี่ยวข้องกับการแทนตัวเลขไบนารีภายใน ตัวอย่างเช่น เราไม่สามารถแสดงค่าที่แน่นอนของ ⅓ เป็นเศษส่วนทศนิยมได้ แน่นอนว่ามีข้อจำกัดที่คล้ายกันในระบบไบนารี่ หากงานต้องการกำจัดข้อผิดพลาดในการปัดเศษ Java มี คลาส BigDecimalสำหรับสิ่งนี้
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION