Làm tròn số Java


146

Tôi dường như không thể tìm thấy câu trả lời mà tôi đang tìm kiếm liên quan đến một câu hỏi đơn giản: làm thế nào để tôi làm tròn bất kỳ số nào gần nhất int?

Ví dụ: bất cứ khi nào số đó là 0,2, 0,7, 0,2222, 0,4324, 0,99999 tôi sẽ muốn kết quả là 1.

Cho đến nay tôi có

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

Nó dường như không làm việc, mặc dù.


Tại sao bạn chia cho 100 trong mã mẫu của bạn?
Jon Skeet

14
Tôi đặt cược của bạn acó loại số nguyên.
Nikita Rybak

1
yea ur phải a là một int ... cảm ơn vì đã chỉ ra điều đó. 100.0 sắp xếp nó cho tôi.
Stevanicus

1
Tôi đoán những gì anh ấy muốn là / 100 được làm tròn, nhưng vâng, câu hỏi có thể sử dụng một số làm rõ.
Jay

1
LƯU Ý: Tại câu hỏi này, câu trả lời tốt hơn được cung cấp.
martijnn2008

Câu trả lời:


289

Math.ceil()là chức năng chính xác để gọi. Tôi đoán alà một int, sẽ thực a / 100hiện số học số nguyên. Hãy thử Math.ceil(a / 100.0)thay thế.

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));

Đầu ra:

1
1.0
1.42
2.0
2

Xem http://ideone.com/yhT0l


3
điều này chỉ khi "a" là gấp đôi
L.Grillo

^^ "a" cần phải là một đôi hoặc đúc một đôi.
Mã hóa

1
alà một inttrong ví dụ này, và nó hoạt động như đề xuất. Khi làm int / floatkết quả là một float, như thể hiện trong đầu ra. Hãy thử liên kết.
dantiston

16

Tôi không biết tại sao bạn chia cho 100 nhưng ở đây giả định của tôi int a;

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

hoặc là

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

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

Điều này dường như để làm công việc hoàn hảo. Làm việc mọi lúc.


2

10 năm sau nhưng vấn đề đó vẫn bắt được tôi.

Vì vậy, đây là câu trả lời cho những người đã quá muộn như tôi.

Cái này không hoạt động

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

Nguyên nhân là kết quả a / 100hóa ra là một số nguyên và nó được làm tròn nên Math.ceil không thể làm gì với nó.

Bạn phải tránh các hoạt động tròn với điều này

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

Bây giờ nó hoạt động.


0

Cách dễ nhất để làm điều này chỉ là: Bạn sẽ nhận được một số float hoặc double và muốn nó chuyển đổi nó thành vòng gần nhất sau đó chỉ cần làm System.out.println((int)Math.ceil(yourfloat)); nó sẽ hoạt động hoàn hảo


-3

Giả sử là gấp đôi và chúng ta cần một số làm tròn không có số thập phân. Sử dụng hàm Math.round ().
Đây là giải pháp của tôi.

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

Output : 
a:1

1
Đây là một câu trả lời sai, vì nó được yêu cầu ở đây để làm tròn UP nếu a = 0,2 kết quả sẽ là 0
Mohamed23gharbi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.