[Java]Działanie nie chce dać wyniku zmiennoprzecinkowego float. 183 1

O temacie

Autor Draquer

Zaczęty 16.10.2020 roku

Wyświetleń 183

Odpowiedzi 1

Draquer

Draquer

Użytkownicy
Problematyk :F
posty366
Propsy23
ProfesjaNierób
  • Użytkownicy
  • Problematyk :F
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"?
Spoiler
import 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);
        }
    }
}
 
Spoiler
#include<iostream>
using namespace std;

int main()
{
      cout << "Hello theModders" <<endl;
      return 0;
}

A.K.

A.K.

Użytkownicy
posty152
Propsy155
Profesjabrak
  • Użytkownicy
W Javie literały bez przecinka są domyślnie typu int, więc 10/100 zwraca 0. Twój program wykonuje to tak:

(float)((10/100) * rata)  -->  (float)(0 * rata)  -->  (float)0.0  -->  0.0


Ż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

10/100.0(przy czym wtedy otrzymujesz typ double)


2. Przez rzutowanie:

10/(float)100

3. Zapisując literał z przyrostkiem f lub F:

10/100F
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry