Inna twórczość > Programowanie
[Java]Działanie nie chce dać wyniku zmiennoprzecinkowego float.
(1/1)
Draquer:
Program pyta użytkownika o wartość kupowanej rzeczy, o ilość rat w których ma zostać spłacona ta rzecz, a na końcu podaje ile wynosi jedna rata wraz z oprocentowaniem. Na przykładnie ostatniego ifa: zmienna "oprocentowanie" zawsze wynosi 0.0, np. dla wartości cena = 100, raty = 25, zmienna ta powinna wynosić 0.4, jednak zawsze podaje wartość 0.0. Co zrobiłem źle w działaniu zmiennej "oprocentowanie"?
Spoilerimport java.util.Scanner;
public class Raty {
public static void main(String[] args){
float cena;
float raty;
Scanner scanner = new Scanner(System.in);
do {
System.out.println("Podaj cenę towaru od 100zł do 10000zł: ");
cena = scanner.nextFloat();
}while(cena < 100 || cena > 10000);
do {
System.out.println("Podaj w ilu ratach chcesz spłacić towar(6-48): ");
raty = scanner.nextFloat();
}while(raty < 6 || raty > 48);
if(raty >= 6 && raty <= 12){
float rata = cena / raty;
float oprocentowanie = (float) ((2.5/100) * rata);
float outcome = rata + oprocentowanie;
System.out.println("Twoje oprocentowanie wynosi 2,5%. Jedna rata + odsetki wynosi: " + outcome);
}
if(raty >= 13 && raty <= 24){
float rata = cena / raty;
float oprocentowanie = (float) ((5/100) * rata);
float outcome = rata + oprocentowanie;
System.out.println("Twoje oprocentowanie wynosi 5%. Jedna rata + odsetki wynosi: " + outcome);
}
if(raty >= 25 && raty <= 48){
float rata = cena / raty;
float oprocentowanie = (float) ((10/100) * rata);
System.out.println("Oprocentowanie: " + oprocentowanie);
float outcome = rata + oprocentowanie;
System.out.println("Twoje oprocentowanie wynosi 10%. Jedna rata + odsetki wynosi: " + outcome);
}
}
}
A.K.:
W Javie literały bez przecinka są domyślnie typu int, więc 10/100 zwraca 0. Twój program wykonuje to tak:
--- Kod: ---(float)((10/100) * rata) --> (float)(0 * rata) --> (float)0.0 --> 0.0
--- Koniec kodu ---
Żeby działanie na literałach domyślnie zwróciło wartość zmiennoprzecinkową, przynajmniej jeden operand musi być typu zmiennoprzecinkowego. Można to zrobić na kilka sposobów:
1. Przez zapis zmiennoprzecinkowy
--- Kod: ---10/100.0
--- Koniec kodu ---
(przy czym wtedy otrzymujesz typ double)
2. Przez rzutowanie:
--- Kod: ---10/(float)100
--- Koniec kodu ---
3. Zapisując literał z przyrostkiem f lub F:
--- Kod: ---10/100F
--- Koniec kodu ---
Nawigacja
Idź do wersji pełnej