2010-12-07 37 views
52

Tôi có hai số nguyên xy. Tôi cần tính toán x/y và kết quả là tôi muốn nổi lên. Ví dụ như kết quả của 3/2 Tôi muốn có 1.5. Tôi nghĩ rằng cách đơn giản nhất (hoặc chỉ) để thực hiện là chuyển đổi xy thành loại phao. Thật không may, tôi không thể tìm thấy một cách dễ dàng để làm điều đó. Bạn có thể giúp tôi với điều đó không?Làm cách nào để chuyển đổi số nguyên thành float trong Java?

+7

float result = ((float) x)/y? – mibollma

+0

kiểm tra điều này: http://xahlee.org/java-a-day/casting.html – fasseg

+2

có thể trùng lặp của [Java: phân chia 2 int làm cho một int?] (Http://stackoverflow.com/questions/787700/ java-dividing-2-ints-make-an-int) – dogbane

Trả lời

103

Bạn chỉ cần đúc ít nhất một trong các toán hạng để một float:

float z = (float) x/y; 

hoặc

float z = x/(float) y; 

hoặc (không cần thiết)

float z = (float) x/(float) y; 
+0

Đây có phải là hiệu quả hơn, hơn: float z = (1.0 * x)/y; ? Là chuyển đổi float nội bộ hiệu quả hơn so với phép nhân? Tnx! – MSquare

+1

Tôi không biết, nhưng tôi nghĩ rằng nó không liên quan 99% hoặc nhiều hơn thời gian. Nó thậm chí không từ xa sẽ là một nút cổ chai. Nếu bạn thực sự quan tâm, [điểm chuẩn nó cho mình.] (Http://stackoverflow.com/q/504103/139010) –

+1

Đầu tiên và thứ hai sẽ gây ra lỗi trên một số thiết bị cánh tay, đảm bảo bạn truyền cả hai số nguyên. –

3

Sau đây là cách bạn có thể làm điều đó:

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    int x = 3; 
    int y = 2; 
    Float fX = new Float(x); 
    float res = fX.floatValue()/y; 
    System.out.println("res = "+res); 
} 

Hẹn gặp bạn!

+7

Sử dụng loại trình bao bọc ('Float') là hoàn toàn không cần thiết cho việc này. –

+0

Bạn hoàn toàn đúng, câu trả lời của bạn tốt hơn nhiều :) – LaGrandMere

+1

Vui lòng [không sử dụng chữ ký hoặc khẩu hiệu] (http://stackoverflow.com/faq#signatures) trong bài đăng của bạn. – meagar

5

Bạn không nên sử dụng phao trừ khi bạn phải thực hiện. Trong 99% trường hợp, gấp đôi là một lựa chọn tốt hơn.

int x = 1111111111; 
int y = 10000; 
float f = (float) x/y; 
double d = (double) x/y; 
System.out.println("f= "+f); 
System.out.println("d= "+d); 

in

f= 111111.12 
d= 111111.1111 

Sau @ bình luận của Matt.

float có độ chính xác rất ít (6-7 chữ số) và cho thấy lỗi làm tròn đáng kể khá dễ dàng. double có 9 chữ số chính xác khác. Chi phí sử dụng gấp đôi thay vì phao là đặc biệt trong 99% các trường hợp tuy nhiên chi phí của một lỗi tinh vi do lỗi làm tròn cao hơn nhiều. Vì lý do này, nhiều nhà phát triển khuyên bạn không nên sử dụng dấu phẩy động và khuyên bạn nên sử dụng BigDecimal.

Tuy nhiên tôi thấy rằng đôi có thể được sử dụng trong hầu hết các trường hợp cung cấp làm tròn hợp lý được sử dụng.

Trong trường hợp này, int x có độ chính xác 32 bit trong khi phao có độ chính xác 24 bit, thậm chí chia cho 1 có thể có lỗi làm tròn. đôi mặt khác có độ chính xác 53 bit, quá đủ để có kết quả chính xác hợp lý.

+3

Bạn nên xây dựng trên _why_ 'double' tốt hơn' float'. –

1

Sameer: ​​

float l = new Float(x/y) 

sẽ không hoạt động, vì nó sẽ tính toán phân chia số nguyên của x và y đầu tiên, sau đó xây dựng một phao từ nó.

float result = (float) x/(float) y; 

Ngữ nghĩa là ứng cử viên tốt nhất.

+0

Câu trả lời của bạn phải là nhận xét. Sameer sẽ không nhận được thông báo nào về bài đăng của bạn. Về mặt ngữ nghĩa, chuyển đổi cả hai ints để float trước khi tính toán kết quả là không cần thiết - do đó nó không phải là tốt hơn, hơn tranforming chỉ là một. Nó cho một ấn tượng sai lầm, và do đó là kém hơn, imho. –

4

Bạn chỉ cần chuyển các giá trị đầu tiên nổi, trước khi nó được tham gia vào việc tính toán thêm:

float z = x * 1.0/y; 
3

// Các số nguyên Tôi muốn chuyển đổi

int myInt = 100; 

// đúc nguyên để nổi

float newFloat = (float) myInt 
Các vấn đề liên quan