Dezimalzahl in Bruch Umwandeln und Kürzen

J

Jakonfire

Mitglied
Das Programm soll Dezimalzahlen in Brüche Umwandeln und Kürzen. Beim Umwandeln hat sich irgendwo ein Fehler eingeschlichen und das Kürzen funktioniert leider nicht. Vielleicht kann mir jemand einen Tipp geben. Danke!

Arguments: parseDouble "-0.5 1.25 3.42 0.0"

Ausgabe: -50/100;125/100;341/100;0/1;

Erwartete Ausgabe: -1/2;5/4;171/50;0/1

Java:
    public static String parseToString(double[] werte) {
        double[] eingabe = new double[werte.length];
        int laenge = eingabe.length;
        String ausgabe = "";

        double zaehler = 0;
        int ganze, gesamtzaehler = 0, nenner = 100, a, b;

        for (int i = 0; i < laenge; i++) {

            ganze = (int) werte[i];
            zaehler = (int)(100 * (werte[i] - ganze));
            gesamtzaehler = (int)(ganze * 100 + zaehler);

            a = gesamtzaehler;
            b = nenner;
            int ggt = 1;

            for (int k = 100; k > 1; k--) {
                if ((a % k) == 0 && (b % k) == 0) {
                    ggt = k;
                } else {
                    ggt = 1;
                }
            }



            gesamtzaehler = gesamtzaehler / ggt;
            nenner = nenner / ggt;


            if (gesamtzaehler == 0) {
                nenner = 1;
            }

            ausgabe = ausgabe + (gesamtzaehler) + "/" + (nenner) + ";";
        }
        return ausgabe;
    }

    }
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Java:
for (int k = 100; k > 1; k--) {
                if ((a % k) == 0 && (b % k) == 0) {
                    ggt = k;
                } else {
                    ggt = 1;
                }
            }

Das Problem liegt m.E. hier, du musst die Schleife verlassen, wenn du den ggt gefunden hast, du läufst doch rückwärts. Wenn du sie nicht verlässt, dann wird der ggt immer kleiner.
 
J

Jakonfire

Mitglied
Java:
for (int k = 100; k > 1; k--) {
                if ((a % k) == 0 && (b % k) == 0) {
                    ggt = k;
                } else {
                    ggt = 1;
                }
            }

Das Problem liegt m.E. hier, du musst die Schleife verlassen, wenn du den ggt gefunden hast, du läufst doch rückwärts. Wenn du sie nicht verlässt, dann wird der ggt immer kleiner.
Also sowohl bei if und else in beiden Fällen break?
 
J

Jakonfire

Mitglied
Mit break sehen die Ergebnisse so aus:

-50/100;5/4;342/2;0/1;
 
Zuletzt bearbeitet:
MoxxiManagarm

MoxxiManagarm

Top Contributor
Also sowohl bei if und else in beiden Fällen break?
Ne der else Fall macht überhaupt garkeinen Sinn. Du initialisierst den ggt ja schon mit 1, er bleibt 1, wenn kein anderer ggt gefunden wird. Du brauchst nur den if Fall, und durch setzt du einen break hin.

Aber wieso kommt z.B. auch 341 anstelle von 342?
Das kann ich dir spontan nicht sagen, aber ich vermute es hängt irgendwie mit deinem Gewurschtel aus a, b, ganze, gesamtzaehler, zaehler und nenner zusammen. Das sind viel zu viele Variablen für diese Aufgabe. Eigentlich brauchst du nur einen nenner, einen zaehler und den ggt.
 
J

Jakonfire

Mitglied
Ne der else Fall macht überhaupt garkeinen Sinn. Du initialisierst den ggt ja schon mit 1, er bleibt 1, wenn kein anderer ggt gefunden wird. Du brauchst nur den if Fall, und durch setzt du einen break hin.


Das kann ich dir spontan nicht sagen, aber ich vermute es hängt irgendwie mit deinem Gewurschtel aus a, b, ganze, gesamtzaehler, zaehler und nenner zusammen. Das sind viel zu viele Variablen für diese Aufgabe. Eigentlich brauchst du nur einen nenner, einen zaehler und den ggt.
Sieht jetzt so aus aber funktioniert nicht mit dem ggt: -50/100;5/4;342/2;0/1;

Die 341 konnte ich lösen das lag am casten auf int


Java:
    public static String parseToString(double[] werte) {
    double [] eingabe = new double [werte.length];
    int laenge = eingabe.length;
    String ausgabe = "";
    
    double  zaehler = 0;
    int ganze, gesamtzaehler = 0, nenner = 100;
    
    for (int i=0; i < laenge; i++){

    ganze = (int)werte[i];
    zaehler = (100*(werte[i] - ganze));
    gesamtzaehler = (int)(ganze * 100 + zaehler);
    
    int ggt = 1;
    
    
    for (int k = gesamtzaehler; k > 1; k--) {
        if ((gesamtzaehler % k) == 0 && (nenner % k) == 0) {
                ggt = k;
                break;
            }
            else {
                ggt=1;
            }   
    }
    gesamtzaehler = gesamtzaehler/ggt;
    nenner = nenner/ggt;
    
    
    if (gesamtzaehler == 0){
        nenner = 1;
    }
    
    ausgabe = ausgabe + (gesamtzaehler) + "/" + (nenner) + ";";
    }
    return ausgabe;     
    }
    
}
 
I

infos9

Mitglied
Am Einfachsten ist es, es auszuprobieren:
Java:
public class Fac {
    public static String convert(float f, int factor) {
        boolean neg = f < 0;
        if (neg) {
            f = -f;
        }
        float min_e = Math.abs(f - (int) (f - 1));
        int min_i = 1;
        for (int i = 2; i <= factor; i++) {
            float e = Math.abs(f - (float) Math.round(f * i) / i);
            if (e < min_e) {
                min_e = e;
                min_i = i;
            }
            if (e < 0.01) {
                break;
            }
        }
        return (neg ? "-" : "") + Math.round(f * min_i) + " / " + min_i;
    }

    public static void main(String[] args) {
        System.out.println(convert(-1.333f, 1000));
        System.out.println(convert((float) Math.PI, 1000));
        System.out.println(convert(-33.33f, 1000));
    }
}
 
MoxxiManagarm

MoxxiManagarm

Top Contributor
Sieht jetzt so aus aber funktioniert nicht mit dem ggt
1. Der else Zweig ist immernoch unnötig.
2. Du brauchst keinen zaehler, ganze + gesamtzaehler. Eine Zahl mit 2 Nachkommastellen mit 100 multipliziert ist bereits dein Gesamtzaehler. Du hast dir hier unnötig Arbeit gemacht.
3. Schmeiß mal das eingabe-Array raus, du verwendest das nicht. Die laenge in der Schleife kannst du direkt durch werte.length ersetzen.
4. Du siehst das manche Fälle funktionieren, manche nicht. Überlege dir doch mal, was der Unterschied ist.
4a. Der erste nicht funktionierende Fall ist -50/100. Die Ursache liegt hier for (int k = gesamtzaehler; k > 1; k--) {, dein gesamtzaehler ist negativ, was bedeudet das für die Schleife? In deiner ersten Version hattest du die 100 hier stehen, was hat dich dazu bewegt das zu ändern?
4b. Der zweite nicht funktionierende Fall ist 342/2, debug das doch mal, wo sind die Werte anders, als du erwartest?
 
Zuletzt bearbeitet:
Blender3D

Blender3D

Top Contributor
Das Programm soll Dezimalzahlen in Brüche Umwandeln und Kürzen. Beim Umwandeln hat sich irgendwo ein Fehler eingeschlichen und das Kürzen funktioniert leider nicht. Vielleicht kann mir jemand einen Tipp geben. Danke!
Die Aufgabe lautet eine Programm erstellen, dass als Eingabe Dezimalzahlen und als Ausgabe gekürzte Brüche hat.

1) Am Besten erstellt man zuerst eine Klasse Bruch. Der Konstruktor hat eine double als Parameter.
2) Die Umwandlung einer reellen Zahl in einen Bruch sieht so aus:
z.B. Wert = 2.25 --> [2.25 * 10^2 / 10^2] --> [225/100] --> kürzen [9/4]
Also wir benötigen folgenden Variablen
Die Position des Kommas, die Anzahl der Ziffern und die Ziffern als Zahl.
idComma = 1; numDigits = 3; digits = 225
--> digits / 10^(numDigits-idComma)


Wegen der Ungenauigkeit von double, ist es nicht zu empfehlen, mittels Berechnungen zu arbeiten.
Besser man Wandelt den Wert in einen String um. Dann ist es ein Leichtes ,die obigen Variablen zu berechnen.
Hier ist noch Anzumerken, die Umwandlung nicht mit Double.toString() zu machen, da dort bei großen Zahlen oder bei vielen Nachkommastellen automatisch die Exponential schreibweise verwendent wird. z.B. 2.00034011E-6
Besser ist es, String.format("%.17f", wert) zu verwenden.
3) Nachdem Zähler und Nenner erweitert berechnet wurden braucht man noch eine Funktion zum Kürzen.
4) Methode String toString() schreiben.
5) Methode doubel toDouble() schreiben.

Das Testprogramm ist jetzt sehr einfach zu erstellen.
Umwandlung double in Bruch:
public class TestBruch {
    public static void main(String[] args) {
        double[] test = { 2.25, -2000003430, 23, -.142, 24.4 };
        for (int i = 0; i < test.length; i++) {
            Fraction f = new Fraction(test[i]);
            System.out.println(test[i] + "\t" + f + " = " + new Fraction(f.toDouble()));
        }
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Variablen Abbruchbedingung: Dezimalzahl Java Basics - Anfänger-Themen 32
W Dezimalzahl in Binär umwandeln - Was sollte ich an meinem Programm verbessern? Java Basics - Anfänger-Themen 5
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
P Zeichenkette mit Binärzahl in Dezimalzahl umrechnen Java Basics - Anfänger-Themen 3
O Dezimalzahl in andere Zahlensysteme Java Basics - Anfänger-Themen 5
1 Binärdarstellung (als String) in Dezimalzahl umwandeln Java Basics - Anfänger-Themen 8
H inputfeld dezimalzahl mit komme statt punkt Java Basics - Anfänger-Themen 12
H OOP Dezimalzahl in Binärzahl mit GUI - Problem Java Basics - Anfänger-Themen 14
J Dezimalzahl in Binärdarstellung Java Basics - Anfänger-Themen 6
J Gleitkommazahl in Dezimalzahl umrechnen Java Basics - Anfänger-Themen 5
F Variablen Dezimalzahl oder doch nicht? Java Basics - Anfänger-Themen 5
D String mit 2 Stellen nach dem Komma (Dezimalzahl) Java Basics - Anfänger-Themen 9
D Umwandlung char -> dezimalzahl und ausgabe als int Java Basics - Anfänger-Themen 5
C Dezimalzahl in Dualzahl. Java Basics - Anfänger-Themen 11
S Regex für Dezimalzahl. Problem mit Nachkommastellen Java Basics - Anfänger-Themen 5
P Umrechnung von Basis b zu Dezimalzahl Java Basics - Anfänger-Themen 7
R dezimalzahl in hexadezimalzahl umwandeln Java Basics - Anfänger-Themen 14
G Dezimalzahl(integer) ziffernweise umdrehen Java Basics - Anfänger-Themen 3
G Binärzahl in dezimalzahl umwandeln Java Basics - Anfänger-Themen 5
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
E Bruch erstellen - Von Int zu Double Ergebnis Java Basics - Anfänger-Themen 24
E Bruch Klasse erstellen Java Basics - Anfänger-Themen 4
W Variablen float rundet beim Bruch rechnen Java Basics - Anfänger-Themen 3
Z Erste Schritte Instanzmethoden Rechnen (Bruch) Java Basics - Anfänger-Themen 18
K Datentypen double x als Bruch aus Integern macht x zu integer? Java Basics - Anfänger-Themen 3
Binary.Coder Bruch in Textarea Java Basics - Anfänger-Themen 5
H Bruch Konstruktor Java Basics - Anfänger-Themen 15
L Bruch rechnen Java Basics - Anfänger-Themen 29
N Bruch Java Basics - Anfänger-Themen 15
I Bruch Konstruktor Java Basics - Anfänger-Themen 4
G Richtige Syntax für Bruch Java Basics - Anfänger-Themen 12
S Rekursive Bruch potenzierung Java Basics - Anfänger-Themen 2
X Bruch Problem (int/double) Java Basics - Anfänger-Themen 3
G bruch soweit es geht kürzen Java Basics - Anfänger-Themen 12
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
S String umwandeln Java Basics - Anfänger-Themen 6
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
K String in Integer umwandeln Java Basics - Anfänger-Themen 4
O Datei in mehrere kleine Dateien umwandeln Java Basics - Anfänger-Themen 47
O Einzelne Bits umwandeln und prüfen Java Basics - Anfänger-Themen 23
O von Basis 10 in Basis x umwandeln Java Basics - Anfänger-Themen 5
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
L String in Integer umwandeln Java Basics - Anfänger-Themen 3
I JSON Datei in Array umwandeln Java Basics - Anfänger-Themen 1
S \n nicht in Zeilenumbruch umwandeln Java Basics - Anfänger-Themen 5
W Dezimalzahlen in Binärzahl umwandeln. Wie möglich ? Java Basics - Anfänger-Themen 9
Vince42 NIO File Tree in XML umwandeln Java Basics - Anfänger-Themen 10
R Kompletten String umwandeln in Integer Java Basics - Anfänger-Themen 10
P 32 Bit Binärzahl Umwandeln in Dezimal Java Basics - Anfänger-Themen 8
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Orkanson Datentypen Integer in String umwandeln/hinzufügen Java Basics - Anfänger-Themen 3
geekex Double zu String umwandeln in einer Methode Java Basics - Anfänger-Themen 28
M String in Gross und Kleinbuchstaben umwandeln Java Basics - Anfänger-Themen 10
H JCalendar in String umwandeln Java Basics - Anfänger-Themen 9
P Wie kann ich mein Programm zu einer App umwandeln? Java Basics - Anfänger-Themen 4
M Beliebigen Text in *** umwandeln Java Basics - Anfänger-Themen 15
A Rekursion Funktion in eine Iterativ Funktion umwandeln Java Basics - Anfänger-Themen 8
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
E Von Double zu Long umwandeln Java Basics - Anfänger-Themen 9
L String in Binär umwandeln Java Basics - Anfänger-Themen 4
G .java in .jar umwandeln Eclipse Java Basics - Anfänger-Themen 12
W String auf char[] umwandeln Java Basics - Anfänger-Themen 3
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
K For Schleife in While Schleife umwandeln Java Basics - Anfänger-Themen 5
C Array in String umwandeln Java Basics - Anfänger-Themen 5
K Methoden Zahlensysteme umwandeln mittels Rekursion Java Basics - Anfänger-Themen 5
W Wie kann man diesen Code in einen Code umwandeln, der folgendes können sollte? Java Basics - Anfänger-Themen 1
I String zu File umwandeln Java Basics - Anfänger-Themen 2
N Collections String in HashMap umwandeln Java Basics - Anfänger-Themen 3
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
G Bilddaten in Matrix umwandeln Java Basics - Anfänger-Themen 1
L Java CMD Console in String umwandeln? Java Basics - Anfänger-Themen 2
D String zu int umwandeln Java Basics - Anfänger-Themen 2
D Problem beim umwandeln eines Strings in eine Dzezimalzahl Java Basics - Anfänger-Themen 6
K Wie .java in .jar umwandeln? Java Basics - Anfänger-Themen 5
N Bestimmte Zeichen eines Strings umwandeln Java Basics - Anfänger-Themen 4
W String Array in Int umwandeln um auf Zahl zu überprüfen Java Basics - Anfänger-Themen 4
G double in float umwandeln Java Basics - Anfänger-Themen 2
M csv in xlsx umwandeln Java Basics - Anfänger-Themen 7
F Char in Long umwandeln? Java Basics - Anfänger-Themen 2
D String in FileInputStream umwandeln Java Basics - Anfänger-Themen 2
J Mit Eclipse PLZ in Koordinaten umwandeln und ausgeben Java Basics - Anfänger-Themen 3
A Erste Schritte Buchstaben in zahlen umwandeln Java Basics - Anfänger-Themen 4
T opengl Dreick in einen Würfel umwandeln Java Basics - Anfänger-Themen 0
S Groß bzw. Klein Buchstaben umwandeln (gemischt) Java Basics - Anfänger-Themen 1
D Methode mit mehren Rekursiven aufrufen in Methode mit einem Rekursiven Aufruf umwandeln! Java Basics - Anfänger-Themen 1
V String in Byte umwandeln Java Basics - Anfänger-Themen 11
S Element von List<E> in String umwandeln Java Basics - Anfänger-Themen 3
N Unsymmetrisches mehrdimensionales Array in eindimensionales umwandeln Java Basics - Anfänger-Themen 2
B JPanel/JFrame in ein Applet umwandeln (Webfähig) Java Basics - Anfänger-Themen 7
W Umwandeln von Dezimal in Dual - Ausgabe incl. Rechenschritte Java Basics - Anfänger-Themen 11
AssELAss String in Datum umwandeln Java Basics - Anfänger-Themen 4
J array in String umwandeln Java Basics - Anfänger-Themen 1
J array in String umwandeln Java Basics - Anfänger-Themen 3
S Klasse properties - Probleme beim umwandeln Java Basics - Anfänger-Themen 3
J subStrings zu int Array umwandeln? Java Basics - Anfänger-Themen 19
K JTextField auslesen, in int umwandeln und in einer anderen Klasse als Zähler verwenden Java Basics - Anfänger-Themen 3
C '.java' in '.exe' umwandeln. Java Basics - Anfänger-Themen 2
T Operatoren Float in byte umwandeln Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Anzeige

Neue Themen


Oben