2012-11-06 28 views
41

thể trùng lặp:
Java Integer division: How do you produce a double?tôi cần phải chuyển đổi một biến int tăng gấp đôi

Bạn tôi đang cố gắng để làm cho một số loại tính toán như một nhiệm vụ cho các lớp học, và anh ấy có một số rắc rối ... Tôi hy vọng bạn có thể giúp anh ta.

Vấn đề là anh ta nhận được đầu vào từ người dùng dưới dạng int (nó phải là, nó là một phần của nhiệm vụ). Anh ấy đang cố gắng chuyển đổi nó thành gấp đôi trong mã bên dưới, nhưng điều này không hiệu quả. Kết quả là int anyway.

double firstSolution = ((b1 * a22 - b2 * a12)/(a11 * a22 - a12 * a21)); 
double secondSolution = ((b2 * a11 - b1 * a21)/(a11 * a22 - a12 * a21)); 

Nếu bạn cần giải thích thêm, tôi sẽ hỏi anh ấy. Cảm ơn trước!

+1

Viết '((double) b1)' thay vì chỉ 'b1'; tương tự như vậy cho 'b2.' Quảng bá cho' double' sẽ lan truyền. –

+0

Giả sử rằng các biến a và b là ints, chỉ cần thực hiện một kiểu gõ đúp – CBredlow

Trả lời

70

Bạn phải đúc một (hoặc cả hai) của đối số cho các nhà điều hành bộ phận để double:

double firstSolution = (b1 * a22 - b2 * a12)/(double)(a11 * a22 - a12 * a21); 

Kể từ khi bạn đang thực hiện các tính toán tương tự hai lần tôi khuyên bạn nên refactoring mã của bạn:

double determinant = a11 * a22 - a12 * a21; 
double firstSolution = (b1 * a22 - b2 * a12)/determinant; 
double secondSolution = (b2 * a11 - b1 * a21)/determinant; 

Điều này hoạt động theo cách tương tự, nhưng bây giờ có một số ẩn ngụ truyền thành gấp đôi. Chuyển đổi này từ int thành double là ví dụ về số widening primitive conversion.

+0

Chỉ cần xác định rủi ro ở đây, 'b1 * a22 - b2 * a12' sẽ dẫn đến' int', giống như định thức. Dẫn đến một số lỗi tính toán kể từ khi diễn viên sẽ được thực hiện sau khi hoạt động trong '()'. – AxelH

6

Tôi nghĩ bạn nên truyền biến hoặc sử dụng lớp Integer bằng cách gọi phương thức doubleValue().

3

Hoặc sử dụng đúc như những người khác đã nói, hoặc nhân một trong các biến int bởi 1.0:

double firstSolution = ((1.0* b1 * a22 - b2 * a12)/(a11 * a22 - a12 * a21)); 
33

Chuyển đổi để tăng gấp đôi có thể được thực hiện bằng cách casting một int cú đúp:

Bạn có thể chuyển đổi một int thành một đôi bằng cách sử dụng mechnism này như vậy:

int i = 3; // i is 3 
double d = (double) i; // d = 3.0 

Thay thế (sử dụng nhận dạng tự động của Java):

double d = 1.0 * i; // d = 3.0 

Thực hiện điều này trong mã của bạn sẽ là một cái gì đó như:

double firstSolution = ((double)(b1 * a22 - b2 * a12)/(double)(a11 * a22 - a12 * a21)); 
double secondSolution = ((double)(b2 * a11 - b1 * a21)/(double)(a11 * a22 - a12 * a21)); 

Hoặc bạn có thể sử dụng một hard-tham số kiểu double (1.0) có java để công việc cho bạn, như vậy:

double firstSolution = ((1.0 * (b1 * a22 - b2 * a12))/(1.0 * (a11 * a22 - a12 * a21))); 
double secondSolution = ((1.0 * (b2 * a11 - b1 * a21))/(1.0 * (a11 * a22 - a12 * a21))); 

Chúc may mắn.

Các vấn đề liên quan