ฉันใช้บรรทัดต่อไปนี้เพื่อแปลง float เป็น int แต่ไม่แม่นยำเท่าที่ฉันต้องการ:
float a=8.61f;
int b;
b=(int)a;
ผลลัพธ์คือ: 8
(ควรเป็น9
)
เมื่อa = -7.65f
ใดผลลัพธ์คือ: -7
(ควรเป็น-8
)
วิธีที่ดีที่สุดที่จะทำคืออะไร?
ฉันใช้บรรทัดต่อไปนี้เพื่อแปลง float เป็น int แต่ไม่แม่นยำเท่าที่ฉันต้องการ:
float a=8.61f;
int b;
b=(int)a;
ผลลัพธ์คือ: 8
(ควรเป็น9
)
เมื่อa = -7.65f
ใดผลลัพธ์คือ: -7
(ควรเป็น-8
)
วิธีที่ดีที่สุดที่จะทำคืออะไร?
คำตอบ:
การใช้Math.round()
จะปัดเศษทศนิยมเป็นจำนวนเต็มที่ใกล้ที่สุด
(int)foo
ง่ายกว่า
ที่จริงแล้วมีวิธีต่าง ๆ ในการ downcast float เป็น int ขึ้นอยู่กับผลลัพธ์ที่คุณต้องการบรรลุ: (สำหรับ int i
, float f
)
round (จำนวนเต็มที่ใกล้เคียงที่สุดกับ float ที่ให้มา)
i = Math.round(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3
หมายเหตุ: นี่คือตามสัญญาเท่ากับ (int) Math.floor(f + 0.5f)
ตัด (เช่นวางทุกอย่างหลังจากจุดทศนิยม)
i = (int) f;
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
ceil / floor (จำนวนเต็มใหญ่กว่า / เล็กกว่าค่าที่กำหนดเสมอหากมีส่วนที่เป็นเศษส่วน)
i = (int) Math.ceil(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 3 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
i = (int) Math.floor(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2
f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3
สำหรับการปัดเศษค่าบวกคุณสามารถใช้(int)(f + 0.5)
ซึ่งทำงานเหมือนกับMath.Round
ในกรณีเหล่านั้น (ตามเอกสาร)
คุณสามารถใช้Math.rint(f)
ในการปัดเศษเป็นจำนวนเต็มคู่ที่ใกล้เคียงที่สุด ; มันมีประโยชน์ถ้าคุณคาดว่าจะจัดการกับจำนวนมากที่มีส่วนที่เป็นเศษส่วนอย่างเคร่งครัดเท่ากับ 0.5 (บันทึกปัญหาการปัดเศษ IEEE ที่เป็นไปได้) และต้องการให้ค่าเฉลี่ยของชุดอยู่ในสถานที่; คุณจะแนะนำอคติอื่นโดยที่ตัวเลขแม้จะเป็นเรื่องธรรมดามากกว่าคี่
ดู
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
สำหรับข้อมูลเพิ่มเติมและตัวอย่างบางส่วน
Math.round(value)
ปัดเศษเป็นจำนวนเต็มใกล้เคียงที่สุด
ใช้
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
Math.round ส่งคืนค่าจำนวนเต็มดังนั้นคุณไม่จำเป็นต้องพิมพ์ตัวอักษร
int b = Math.round(float a);
ใช้Math.round(value)
จากนั้นหลังจากพิมพ์ cast เป็นจำนวนเต็ม
float a = 8.61f;
int b = (int)Math.round(a);
สำหรับฉันง่ายขึ้น: (int) (a.5.5) // a คือ Float ส่งคืนค่าที่ปัดเศษ
ไม่ขึ้นอยู่กับประเภท Java Math.round ()