1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Java Anfängerprbelm

Discussion in 'Programmieren' started by aurum, Nov 9, 2006.

Thread Status:
Not open for further replies.
  1. aurum

    aurum Kbyte

    Das Programm soll bei der Eingabe von: Kilogrampreis in Cent von Kirschen, der Menge in kg, und der Mehrwertsteuer in % jeweils den Brutto-, Nettopreis und die Mehrwertsteuer der kirschen ausweisen.

    //Das was ich bisher hinbekommen hab, aber irgendwie falsch ist:

    public class Kirschen {
    public static void main (String[] args) {
    float zahl1 = Integer.parseInt(args[0]);
    float zahl2 = Integer.parseInt(args[1]);
    float zahl3 = Integer.parseInt(args[2]);
    float zahl4 = (zahl1*zahl2)/100000; //100000 wegen ctund kg
    double zahl5 = zahl4*(zahl3/100); // 100 um von % in 0.irgendwas umzurechnen
    double zahl6 = zahl4-zahl5;
    System.out.println("Brutto: "+zahl4+" Euro");
    System.out.println("MWSt: "+zahl5+" Euro");
    System.out.println("Netto: "+zahl6+" Euro");
    }
    }


    Für z.B. java Kirschen 232 1500 16 müsste es mir laut Taschenrechner folgendes ausgeben:

    Brutto: 3.48 Euro
    MWSt: 0.48 Euro
    Netto: 3.00 Euro


    Es treten aber Rundungsfehler auf (ich neheme an wegen der Gleitkommazahlen)! :bahnhof:

    Wie kann ich diese Fehler beseitigen? Wie muss ich das progarmm umschreiben, sodass ich mathamatisch korrekte rundungen, auf zwei Nachkommastellen erhalte?


    mfg und thx for all comments
     
  2. kika1983

    kika1983 Byte

    Mmh, du gehst das zu kompliziert an.
    Als erstes würde ich die Eingabedaten nicht als String sondern als int bzw. double angeben. Dann musst du beachten, dass Kommazahlen immer mit Kommazahlen oparieren sollten (/100.0 an Stelle von /100). Ansonsten rundet java selbst und das macht manchmal Probleme. Ich würde das ganze so machen:

    public class kirschen {

    private static void writeData(int preis, double gewicht, int mwst)
    {
    double brutto = (gewicht * preis)/100.0;
    double bruttoGerundet = Math.round( brutto * 100.0 ) / 100.0;
    System.out.println("Brutto: "+ bruttoGerundet +" Euro");
    double mwstAnteil = brutto * mwst/100.0;
    double mwstGerundet = Math.round(mwstAnteil * 100.0 ) / 100.0; //math.round zum runden, *100 & /100 um auf 2 Nachkommastellen zu runden
    System.out.println("Mwst: "+ mwstGerundet +" Euro");
    double netto = mwstGerundet + bruttoGerundet;
    System.out.println("Netto: "+ netto +" Euro");
    }

    public static void main (String[] args) {
    writeData(232,5.32,16);
    }


    Vielleicht hilfts dir weiter...
     
  3. Chummer

    Chummer Megabyte

    Nur kurz drüber geschaut:

    Prozentrechnen üben.
    Ach ja, Deutschland und die Prozentrechnung... woran erinnert mich das jetzt nur...

    Schnapp dir mal einen Taschenrechner und rechne nach:

    zahl1= 232;
    zahl2=1500;
    zahl3=16;
    zahl4= (232*1500)/100000 = 3,48;
    zahl5=zahl4*(zahl3/100) = 3,48*0,16=0,5568
    zahl6 = zahl4-zahl5 = 3,48-0,5568 = 2,932

    Ergebnis:
    3,48
    0,5568
    2,932

    Kommt das in etwa mit deinen Rundungsfehlern hin?

    Hier nicht. Siehe implizite Typkonversion.
     
  4. kika1983

    kika1983 Byte

    Das Programm soll bei der Eingabe von: Kilogrampreis in Cent von Kirschen, der Menge in kg, und der Mehrwertsteuer in % jeweils den Brutto-, Nettopreis und die Mehrwertsteuer der kirschen ausweisen.

    Was soll das hier bitte berechnen?
    zahl4= (232*1500)/100000

    Laut Ausgabe sollte das der Bruttowert sein. Wieso geteilt durch 100000? Kilogrammpreis(in Cent) * Menge in kg (Gewicht) = Bruttopreis in Cent => Bruttopreis in Euro sollte doch wohl Bruttopreis in Cent / 100 sein!?!

    Implizite Typkonversion funzt nicht immer wie sie soll:
    double bruttoGerundet = Math.round( brutto * 100.0 ) / 100.0; <> double bruttoGerundet = Math.round( brutto * 100 ) / 100;
    Probiers aus...
     
  5. Chummer

    Chummer Megabyte

    Ich weiß dass die Konversionen Probleme machen können deswegen der Hinweis: Hier nicht.
    Sie funzt aber IMMER wie sie soll. Nur nicht immer wie man es gerne hätte.
    Ob das mit den Berechnungen so stimmt hab ich gar nicht nachgeschaut...
    Aber: rein geht killogramm = 1500? Das glaub ich irgendwie nicht *g Das sind wohl gramm. Und dann stimmt's.
    dh für 1000g zahlt man 232c.
    für 1500g zahlt man (232*1,5) bzw (232*1500)/1000 [c/kg] oder (232*1500)/100000 [€/kg]
    Ohne MWST...
     
  6. aurum

    aurum Kbyte

    Thx für die zahlreichen Kommentare.

    Zunächst, ich hab bei der Eingabe des Gewiches tatsächlich fälschlicherweise kg hingeschreiben, obwohl es Gramm sein müssten.

    Ich hab aber immer noch nicht verstanden, vielleicht hat es mir einer von euch auch schon gesagt :sorry: , wie ich z.B. 348000/100000=3.48 und 3.48*(16/100)=0.56 ausgebe. bei mir kommt beim ersten immer 3.0 raus?!
     
  7. aurum

    aurum Kbyte

    Also nach einigem probieren ist es mir jetzt doch gelungen zu verstehen was ihr meintet, dass ist dabei rausgekommen:

    public class Kirschen {
    public static void main (String[] args) {
    float zahl1 = Integer.parseInt(args[0]);
    float zahl2 = Integer.parseInt(args[1]);
    float zahl3 = Integer.parseInt(args[2]);
    float zahl4 = (zahl1*zahl2)/100000;
    double zahl7 = Math.round(zahl4*100.0)/100.0;
    float zahl5 = zahl4*(zahl3/100);
    double zahl8 = Math.round(zahl5*100.0)/100.0;
    float zahl6 = zahl4-zahl5;
    double zahl9 = Math.round(zahl6*100.0)/100.0;
    System.out.println("Brutto: "+zahl7+" Euro");
    System.out.println("MWSt: "+zahl8+" Euro");
    System.out.println("Netto: "+zahl9+" Euro");
    }
    }

    nicht schön, aber selten ;) und es funzt :rolleyes:

    thx nochmal
     
Thread Status:
Not open for further replies.

Share This Page