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

[0] Indeks wiadomości

Idź do wersji pełnej