2012-11-06 13 views
41

Powiel możliwe:
Java Integer division: How do you produce a double?muszę konwertować zmienną int podwoić

Mój przyjaciel próbuje zrobić jakiś obliczeń jako zadanie dla klasy, a on ma jakiś kłopoty ... Mam nadzieję, że możesz mu pomóc.

Problem polega na tym, że otrzymuje dane wejściowe od użytkownika jako int (musi być, jest częścią zadania). Próbuje przekonwertować go na podwójny w poniższym kodzie, ale to nie działa. Wyniki i tak są int.

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

Jeśli potrzebujesz więcej wyjaśnień, poproszę go o to. Z góry dziękuję!

+1

Napisz '((double) b1)' zamiast tylko 'b1'; również dla 'b2. Promocja do" podwójnego "będzie się propagować. –

+0

Zakładając, że zmienne a i b są ints, po prostu wykonaj podwójną typografię. – CBredlow

Odpowiedz

70

Trzeba oddać jeden (lub oba) argumenty do operatora dzielenia się double:

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

Ponieważ wykonują taką samą kalkulację dwukrotnie Polecam refaktoryzacji kodu:

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

Działa to w ten sam sposób, ale teraz istnieje domyślny rzutowany na. Ta konwersja z int do double jest przykładem widening primitive conversion.

+0

Po prostu wskazując tutaj ryzyko, 'b1 * a22 - b2 * a12' spowodowałoby' int', to samo co wyznacznik. Prowadząc do pewnego błędu obliczeniowego, ponieważ rzutowanie zostanie wykonane po operacji w '()'. – AxelH

6

Myślę, że powinieneś rzucić zmiennej lub użyć klasy Integer przez wywołanie metody doubleValue().

3

Albo użycie odlewanie jak inni już powiedziałem, albo pomnożyć jednej ze zmiennych int przez 1.0:

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

Konwersja podwoić może być wykonana przez casting int do podwójnej:

Ty możliwe, przekonwertować int do podwójnego za pomocą tego mechnism tak:

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

Alternative (za pomocą automatycznego rozpoznawania typu Javy):

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

Realizacja tego w kodzie byłoby coś jak:

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

Alternatywnie można użyć twardego parametr typu podwójnej (1.0) mieć Java do pracy dla ciebie, tak jak poniżej:

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

Powodzenia.

Powiązane problemy