Tôi đã sử dụng dòng sau để chuyển đổi float sang int, nhưng nó không chính xác như tôi muốn:
float a=8.61f;
int b;
b=(int)a;
Kết quả là: 8
(Nó nên 9
)
Khi nào a = -7.65f
, kết quả là: -7
(Nên là -8
)
Cách tốt nhất để làm điều đó là gì?
Tôi đã sử dụng dòng sau để chuyển đổi float sang int, nhưng nó không chính xác như tôi muốn:
float a=8.61f;
int b;
b=(int)a;
Kết quả là: 8
(Nó nên 9
)
Khi nào a = -7.65f
, kết quả là: -7
(Nên là -8
)
Cách tốt nhất để làm điều đó là gì?
Câu trả lời:
Sử dụng Math.round()
sẽ làm tròn số float đến số nguyên gần nhất.
(int)foo
là đơn giản hơn.
Trên thực tế, có nhiều cách khác nhau để downcast float thành int, tùy thuộc vào kết quả bạn muốn đạt được: (đối với int i
, float f
)
vòng (số nguyên gần nhất để thả nổi)
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
lưu ý: đây là, theo hợp đồng, bằng (int) Math.floor(f + 0.5f)
cắt ngắn (tức là bỏ mọi thứ sau dấu thập phân)
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
trần / sàn (một số nguyên luôn lớn hơn / nhỏ hơn một giá trị đã cho nếu nó có bất kỳ phần phân số nào)
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
Để làm tròn các giá trị dương , bạn cũng có thể chỉ sử dụng (int)(f + 0.5)
, hoạt động chính xác như Math.Round
trong các trường hợp đó (theo tài liệu).
Bạn cũng có thể dùng Math.rint(f)
để làm tròn đến số nguyên chẵn gần nhất ; nó có thể hữu ích nếu bạn dự kiến xử lý nhiều phao có phần phân số hoàn toàn bằng 0,5 (lưu ý các vấn đề làm tròn của IEEE có thể) và muốn giữ mức trung bình của tập hợp; Tuy nhiên, bạn sẽ giới thiệu một thiên vị khác, trong đó các số chẵn sẽ phổ biến hơn lẻ.
Xem
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
để biết thêm thông tin và một số ví dụ.
Math.round(value)
làm tròn giá trị đến số nguyên gần nhất.
Sử dụng
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
Math.round cũng trả về một giá trị số nguyên, vì vậy bạn không cần phải đánh máy.
int b = Math.round(float a);
Sử dụng Math.round(value)
sau đó sau khi gõ nó thành số nguyên.
float a = 8.61f;
int b = (int)Math.round(a);
Theo tôi, dễ dàng hơn: (int) (a +.5) // a là Float. Trả về giá trị làm tròn.
Không phụ thuộc vào các loại Java Math.round ()