Java ปัดเศษจำนวนเท่าใดก็ได้


146

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

ตัวอย่างเช่นเมื่อใดก็ตามที่จำนวน 0.2, 0.7, 0.2222, 0.4324, 0.99999 ฉันต้องการให้ผลลัพธ์เป็น 1

จนถึงตอนนี้ฉันมี

int b = (int) Math.ceil(a / 100);

ดูเหมือนว่าจะไม่ได้ทำงานแม้ว่า


ทำไมคุณหารด้วย 100 ในโค้ดตัวอย่าง?
Jon Skeet

14
ฉันพนันaได้เลยว่าคุณมีประเภทจำนวนเต็ม
Nikita Rybak

1
ใช่แล้วใช่เอคือ int ... ขอบคุณสำหรับการชี้ให้เห็นว่า 100.0 เรียงให้ฉัน
Stevanicus

1
ฉันคาดเดาสิ่งที่เขาต้องการคือ / 100 ปัดเศษขึ้น แต่ใช่คำถามอาจใช้การชี้แจงบางอย่าง
Jay

1
หมายเหตุ: ณคำถามนี้มีคำตอบที่ดีกว่า
martijnn2008

คำตอบ:


289

Math.ceil()เป็นฟังก์ชั่นที่ถูกต้องในการโทร ฉันคาดเดาaเป็นintซึ่งจะทำให้a / 100การดำเนินการทางคณิตศาสตร์จำนวนเต็ม ลองMath.ceil(a / 100.0)แทน

int a = 142;
System.out.println(a / 100);
System.out.println(Math.ceil(a / 100));
System.out.println(a / 100.0);
System.out.println(Math.ceil(a / 100.0));
System.out.println((int) Math.ceil(a / 100.0));

ขาออก:

1
1.0
1.42
2.0
2

ดูhttp://ideone.com/yhT0l


3
นี่ก็ต่อเมื่อ "a" เป็นสองเท่า
L.Grillo

^^ "a" จะต้องเป็นแบบ double หรือ cast a double
Codeversed

1
aเป็นintในตัวอย่างนี้และทำงานตามที่แนะนำ เมื่อทำint / floatผลคือ a floatตามที่แสดงในผลลัพธ์ ลองลิงค์
dantiston

16

ฉันไม่รู้ว่าทำไมคุณหารด้วย 100 แต่นี่คือสมมติฐานของฉัน int a;

int b = (int) Math.ceil( ((double)a) / 100);

หรือ

int b = (int) Math.ceil( a / 100.0);

11
int RoundedUp = (int) Math.ceil(RandomReal);

ดูเหมือนว่าจะทำงานที่สมบูรณ์แบบ ทำงานทุกครั้ง


2

10 ปีต่อมา แต่ปัญหานั้นยังจับฉันอยู่

นี่คือคำตอบสำหรับคนที่สายเกินไป

สิ่งนี้ใช้ไม่ได้

int b = (int) Math.ceil(a / 100);

ทำให้ผลลัพธ์a / 100กลายเป็นจำนวนเต็มและมันถูกปัดเศษเพื่อให้ Math.ceil ไม่สามารถทำอะไรกับมันได้

คุณต้องหลีกเลี่ยงการปัดเศษด้วยวิธีนี้

int b = (int) Math.ceil((float) a / 100);

ตอนนี้มันใช้งานได้


0

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือ: คุณจะได้รับทุ่นหรือสองเท่าและต้องการให้มันแปลงเป็นรอบที่ใกล้เคียงที่สุดจากนั้นเพียงแค่ทำ System.out.println((int)Math.ceil(yourfloat)); มันจะทำงานได้อย่างสมบูรณ์แบบ


-3

สมมติว่าเป็น double และเราต้องการตัวเลขที่ปัดเศษโดยไม่มีทศนิยม ใช้ฟังก์ชัน Math.round ()
นี่เป็นวิธีแก้ปัญหาของฉัน

double a = 0.99999;
int rounded_a = (int)Math.round(a);
System.out.println("a:"+rounded_a );

Output : 
a:1

1
นี่เป็นคำตอบที่ผิดเนื่องจากมีการขอให้ที่นี่ปัดเศษขึ้นถ้า a = 0.2 ผลลัพธ์จะเป็น 0
Mohamed23gharbi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.