2012-12-21 42 views
5

Tôi có đoạn mã sau:Java int cast trả về 0

int i = (int) 0.72; 
System.out.println(i); 

nào mang lại kết quả như sau:

0 

tôi sẽ của tưởng tượng rằng biến i nên có giá trị của 1(kể từ 0,72> 0,5 => 1), tại sao điều này không đúng?

(Tôi tưởng tượng rằng khi đúc để int, nó chỉ đơn giản cắt giảm của các chữ số thập phân sau dấu phẩy, không tính đến tài khoản của làm tròn lên, vì thế tôi có lẽ sẽ phải chăm sóc mà bản thân mình?)

+1

Ai đó cần cắt bớt; những người khác cần làm tròn. Chỉ có một quy tắc có thể áp dụng cho một chuyển đổi thu hẹp và một quy tắc là cắt ngắn. –

+0

Những gì bạn định sử dụng, là 'Math.round()' – Aufziehvogel

+0

bài đăng này http: // stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places-in-java có thể giúp bạn –

Trả lời

7

Đúng, việc truyền tới một int sẽ chỉ cắt ngắn số đó. Bạn có thể làm một việc như thế này để có kết quả như sau:

int i = (int)Math.round(0.72); 
System.out.println(i); 

Điều này sẽ in 1 cho 0,72 và 0 cho 0,28 ví dụ.

3

Bởi vì khi bạn cast một đôi để int, phần thập phân là cắt ngắn

CẬP NHẬT Math.round sẽ cho kết quả mong muốn của bạn thay vì Math.ceil:

System.out.println(Math.round(0.72)); 
// will output 1 

System.out.println(Math.round(0.20)); 
// will output 0 

bạn có thể sử dụng Math.ceil:

System.out.println(Math.ceil(0.72)); 
// will output 1 
System.out.println(Math.ceil(0.20)); 
// will output 1 
+0

Có đề cập đến, rằng 'ceil' sẽ luôn luôn tròn lên trên, không chỉ khi'> = .5' – Aufziehvogel

+0

@Aufziehvogel đã chỉnh sửa câu trả lời của tôi, cảm ơn! – Abubakkar

1

Truyền tới hàm int giảm phần thập phân. Đó là lý do tại sao bạn nhận được 0 bởi vì bất cứ điều gì sau khi 0 được gỡ bỏ (trong trường hợp của bạn là 72). Nếu bạn muốn tròn thì hãy xem Math.round(...)

1

cast Explicit hiện một chuyển đổi một float/giá trị gấp đôi lên một biến int (mà loại bỏ các phần phân đoạn)

1

Java không làm tròn số như chúng tôi chỉ đơn giản là do.It truncates phần thập phân. Nếu bạn muốn làm tròn số sử dụng java.lang.Math

1

Đúc double đến int cắt bớt phần không phải số nguyên của số.

Để làm tròn số như bạn mô tả, sử dụng Math.round()

0

Là một người mới bắt đầu Java hoàn tất, và chỉ trong trường hợp kinh nghiệm của tôi là hữu ích cho một ai đó, tôi chỉ làm những sai lầm sau đây:

int x = (int) Math.random() * 10;

... sẽ luôn đặt x thành 0. Thay vào đó, tôi nên thực hiện int x = (int) (Math.random() * 10);.

Không có nhiều lỗi cụ thể về Java, nhưng tôi sẽ chỉ ném điều này trong trường hợp bất kỳ ai bối rối trước tình huống này khi câu hỏi này xảy ra.