1. doubleประเภท

Java จัดเตรียมdoubleประเภทสำหรับการทำงานกับจำนวนจริง (เศษส่วน) ใช้พื้นที่8 bytesในหน่วยความจำ (มากเป็นสองเท่าของประเภทint) และสามารถเก็บค่าในช่วงตั้งแต่ถึง สำหรับการเปรียบเทียบ: ประเภทสามารถเก็บ ค่าในช่วงจากถึง-1.7*10308+1.7*10308int-2*109+2*109

ในจำนวนจริง ส่วนที่เป็นเศษส่วนจะถูกเขียนไว้หลังจุดทศนิยม ตัวอย่างเช่น 123.456 หรือ 2.5 หรือ 100.00 หรือ 0.01 เมื่อคอมพิวเตอร์จัดการกับตัวเลขดังกล่าว เราจะเรียกมันว่าเลขทศนิยม

อย่างไรก็ตาม นอกจากdoubleประเภทแล้ว เรายังมีfloatประเภท (ซึ่งมีขนาดเพียง 4 ไบต์) ชื่อของมันมาจากจุดลอยตัว และชื่อdoubleมาจากdouble float A doubleมีขนาดใหญ่เป็นสองเท่าของ a float: 8 bytesเทียบ4กับ เรียกอีกอย่างว่าเลขทศนิยมที่มีความแม่นยำสองเท่า


2. การสร้างdoubleประเภท

ประเภทคู่ใช้สำหรับเก็บจำนวนจริง หากต้องการสร้างตัวแปรในรหัสที่สามารถเก็บจำนวนจริงได้ คุณต้องใช้คำสั่งดังนี้:

double name;
การสร้างdoubleประเภท

โดยที่name คือชื่อของตัวแปร ตัวอย่าง:

คำแถลง คำอธิบาย
double price;
priceมีการสร้างตัวแปรจริง
double weight;
weightมีการสร้างตัวแปรจริง
double lightSpeed;
lightSpeedมีการสร้างตัวแปรจริง

เช่นเดียวกับintประเภท คุณสามารถใช้ชวเลขเพื่อสร้างdoubleตัวแปรหลายตัวพร้อมกันได้:

double name 1, name 2, name 3;
การสร้างdoubleตัวแปร หลายตัว

และกำหนดค่าให้กับพวกเขาทันที:

double name 1 = value 1, name 2 = value 2, name 3 = value 3;
การสร้างและเริ่มต้นdoubleตัวแปร หลายตัว

ตัวอย่าง:

คำแถลง บันทึก
double price = 5.0;
ที่เก็บตัวแปร5.0
double weight = 2;
ที่เก็บตัวแปร2.0
double x = 1.0, y = 2.0, z = 3.0;

3. การกำหนดจำนวนเต็มและจำนวนจริง

คงจะไม่ดีถ้าสามารถกำหนดจำนวนเต็มให้กับintตัวแปรเท่านั้น และจำนวนจริง — ให้กับdoubleตัวแปร เท่านั้น เราต้องการที่จะสามารถแปลงระหว่างตัวเลขทั้งสองประเภทได้ และ Java ให้ความสามารถนี้

อย่างแรก สามารถกำหนดทั้งจำนวนจริงและจำนวนเต็มให้กับdoubleตัวแปรได้ เมื่อกำหนดค่าจำนวนเต็ม พวกมันจะถูกแปลงเป็นจำนวนจริง แน่นอน ความแม่นยำบางอย่างอาจหายไปในกระบวนการนี้

คำแถลง บันทึก
double price = 5.0;
ที่เก็บตัวแปร5.0
double weight = 2;
ที่เก็บตัวแปร2.0
int t = 1000;
double x =  t * t;

ที่xเก็บตัวแปร1000000.0

ประการที่สอง หากนิพจน์บางอย่างเกี่ยวข้องกับจำนวนเต็มและจำนวนจริง จำนวนเต็มจะถูกแปลงเป็นจำนวนจริงก่อน จากนั้นจึงจะดำเนินการกับจำนวนจริงอื่นๆ

คำแถลง บันทึก
int t = 1000;
double x = t * 5.0;

ที่xเก็บตัวแปร5000.0
System.out.println(5 * 2);
ตัวเลข10จะแสดงบนหน้าจอ
System.out.println(5 * 2.0);
ตัวเลข10.0จะแสดงบนหน้าจอ

และสุดท้าย ยังสามารถกำหนดจำนวนจริงให้กับintตัวแปร ได้อีกด้วย เมื่อเราทำเช่นนี้ ส่วนที่เป็นเศษส่วนของจำนวนจริงจะถูกยกเลิก — ตัวเลขจะถูกปัดเศษลงเป็นจำนวนเต็มที่ใกล้เคียงที่สุด

นอกจากนี้ คอมไพเลอร์ต้องการให้โปรแกรมเมอร์บันทึกอย่างชัดเจนถึงสิ่งที่เกิดขึ้น (เพื่อให้แน่ใจว่าโปรแกรมเมอร์คนอื่นๆ เข้าใจว่าส่วนที่เป็นเศษส่วนกำลังถูกทิ้ง) โดยทั่วไปแล้วการแปลงดังกล่าวจะมีลักษณะดังนี้ในโค้ด:

integer_variable = (int)(real_number);
การกำหนดจำนวนจริงให้กับintตัวแปร

ตัวอย่าง:

คำแถลง บันทึก
int x = (int)(5.5);
ที่xเก็บตัวแปร5
double a = 5.999;
int x = (int)(a);
ที่xเก็บตัวแปร5
double a = 5.999;
int b = 2;
int x = (int)(a * b);
ที่xเก็บตัวแปร11


4. การหารจำนวนเต็มและจำนวนจริงในภาษาจาวา

เมื่อหารจำนวนเต็มด้วยจำนวนเต็ม เศษที่เหลือจะถูกทิ้งเสมอ แล้วเราจะหาร5ยัง ไง 2ให้ได้2.5?

ในตอนแรก ดูเหมือนว่าตัวเลือกที่ถูกต้องคือ:

double d = 5 / 2;

แต่มันไม่ง่ายอย่างนั้น ปัญหาที่นี่คือเครื่อง Java จะคำนวณค่าของก่อน5 / 2แล้วจึงกำหนดผลลัพธ์ให้กับdตัวแปร และ5 / 2การดำเนินการคือการหารจำนวนเต็ม นั่นหมายความว่าd จะมี2หรือให้แม่นยำยิ่งขึ้น2.0

วิธีแก้ไขที่ถูกต้องคือเขียนตัวเลขอย่างน้อยหนึ่ง ตัวที่เกี่ยวข้องกับการหารเป็นจำนวน จริง (เช่น มีจุดทศนิยม):

double d = 5.0 / 2;
double d = 5 / 2.0;
double d = 5.0 / 2.0;

ในแต่ละสำนวนd จะประกอบด้วย2.5

แต่ถ้าเรากำลังทำงานกับตัวแปรล่ะ เกิดอะไรขึ้นถ้าเรามีรหัสเช่นนี้:

int a = 5;
int b = 2;
double d = a / b;

มีวิธีแก้ไขที่ลื่นไหล (และชัดเจน) ที่นี่ — บังคับให้เครื่อง Java แปลงตัวแปรเป็นจำนวนจริงโดยการคูณด้วยหนึ่งเป็นจำนวนจริง ( 1.0)

int a = 5;
int b = 2;
double d = a * 1.0 / b;

โปรดทราบว่าการคูณและการหารมีความสำคัญเท่ากัน และดำเนินการจากซ้ายไปขวา นั่นหมายความว่า มันสำคัญตรงที่เราคูณ 1.0

ตัวอย่าง:

คำแถลง ลำดับการดำเนินการ ผลลัพธ์
int a = 5;
int b = 2;
double d = 1.0 * a / b;
(1.0 * a) / b; 2.5
int a = 5;
int b = 2;
double d = a * 1.0 / b;
(a * 1.0) / b; 2.5
int a = 5;
int b = 2;
double d = a / b * 1.0;
(a / b) * 1.0; 2.0