nach Kommawert einer Zahl

Status
Nicht offen für weitere Antworten.

chrisgl

Mitglied
Hi!
Bin gerade am basteln und will so learning by doing nen kleinen Rechner schreiben.
Dabei habe ich eine Eingabe aus einem Textfeld die ich in Float umwandle.
Nun wollte ich nur den Teil der Zahl nach dem Komma haben. Also sollte ja Zahl Modulo 1 =^= Zahl%1 für den Rest ja den Wert nach dem Komma ausgeben.
Doch wenn ich zB 12,9 eingebe bekomme 0,900...4 als ausgabe.
Sicherlich liegt das an dem Modulo dachte ich also habe ich eine while schleife geschrieben die immer -1 rechnet solange die Zahl > 1 ist. Auch dort habe ich dieses Ergebnis bekommen.
Kann mir jemand sagen wie ich genau zB 0,9 als Ausgabe bekomme?
Danke MfG Christian

Noch kurz der Code:

float nachKommaZahl() {
return(nachKomma=getZahl()%1);
}

bei getZahl() bekommt er einfach nur den Wert aus der Eingabe
 
B

Beni

Gast
Flieskommazahlen sind ungenau, blabla, Forumsuche + Wikipedia, etc.

Schreib dir eine Methode die nur die ersten Ziffern anguckt, und die letzte ignoriert. Oder guck dir das NumberFormat an, vielleicht kannst du damit was hilfreiches bauen.
 

lin

Top Contributor
Könntests dir auch so basteln, dass du zuerst die Nachkommastellen der Zahl die du übergibst, rausholst, bei 12.9 als 1 und diese Zahl dann speicherst.
Dann kannst du dein Modulo ausführen und am Ende wieder auf soviel Nachkommastellen (hier 1) runden.
 

L-ectron-X

Gesperrter Benutzer
Du hast geschrieben, dass die Eingabe aus einem Textfeld kommt.
Du könntest also die Zeichenkette am Komma trennen, eine 0 vor das Komma setzen und die Stellen nach dem Komma einfach übernehmen.
 

chrisgl

Mitglied
Danke!!!

Für die Anregungen. Das mit dem Abtrennen und dem auslesen der Werte nach Null hab ich auch schon überlegt. Nur bin ich da auf keinen grünen Ast gekommen vielleicht kannst du mir da nochmal helfen. Mit nen Tipp.

Hab ne andere Variante erstmal:
Code:
    float getZahl(){
        eingabeZahl= Float.valueOf( hauptprog.dezimalZahl.getText() ).floatValue();
        return eingabeZahl;
    }
    
    int vorKommaZahl() { 
        return vorKomma = (int) (getZahl());
    }

    int nachKommaZahl() {
        nachKomma = (int)(getZahl()*10000 - vorKommaZahl()*10000);
        return nachKomma;
    }

Ist wahrscheinlich nicht so elegant. Hatte zwischen durch schon einige fehler gefunden die ich immer wieder kompensiert habe. Nun sollte die Implentierung passen.
Aber falls du mir noch nen Tipp zum direckten Auslesen gibst wäre das ganz nett denn ich denke so ist das immer fehlerbehaftet.
Danke !!!!
Chris

Edit: Mist der Fehler liegt im Detail. Kann nur mit max 1000 rechnen weil sonst rundet er also wäre dieses auslesen doch noch sehr viel besser.
 

chrisgl

Mitglied
Und noch ma!
Nach einigen Tests fand ich immer noch Rundungsfehler.
Also hab ich mir mal dran gemacht und das mit diesem auslesen des Strings probiert.
Und siehe da es geht relativ gut nur kann ich zum Schluss nicht einfach int machen. Sondern ich muss die Strings in Float umwandeln und dann in int Casten(ich glaube so nennt man das). Und dann kann ich die als int aus geben. Denn noch paar Exceptions abfangen und jetzt geht es erstmal.....
Hier noch mal der Code:
Code:
    String getZahl(){
        eingabeString=hauptprog.dezimalZahl.getText();
        return eingabeString;
    }

    int kommaPosition() {
        positionKomma=(hauptprog.dezimalZahl.getText()).indexOf(".");       
        System.out.println(positionKomma);
        return positionKomma;
    }

    int vorKommaZahl() { 
        if (positionKomma<0) positionKomma=0;
        vorKommaString=getZahl().substring(0,positionKomma);
        if (vorKommaString.length()==0) vorKommaString="0";
        vorKomma =(int) Float.valueOf( vorKommaString ).floatValue();
        //vorKomma=Integer.parseInt(nachKommaString);
        return vorKomma;    
    }

    int nachKommaZahl() {
        nachKommaString=getZahl().substring(positionKomma+1,getZahl().length());
        nachKomma =(int) Float.valueOf( nachKommaString ).floatValue();
        //nachKomma=Integer.parseInt(nachKommaString);
        return nachKomma;
    }

Sieht doch etwas böse aus. Glaube die beiden If's bei vorKommaZahl() kann man zusammen fassen.
Ein Problem ist noch die Ausgabe von zB 45.008 und 45.8 ist gleich für die Nachkommaeinheit. Aber ich glaube da habe ich schon einen Lsg ansatz.
Aber jetzt nicht mehr! Bin verdammt müde.
So dann ich wars
Christian
 

anfänger

Mitglied
deine Substringaufruf in der Nachkomme-Methode ist so nicht ganz richtig. eigentlich müsste dir da eine Exception geworfen werden, weil du auf eine Position zugreifen willst, die dein String gar nicht mehr hat. Bin mir da aber nicht sicher. Bersser ist da aber auf alle Fälle:

Code:
nachKommaString = getZahl().substring(positionKomma+1);

Die Methode geht dann automatisch bis zum letzten Zeichen deines Strings.

Und ich hab dann noch eine Frage. Wieso machst wandelst du deinen Nachkomma-String dann in einen Float um und castest ihn dann in int?
Mach doch dann lieber gleich :
Code:
nachKomma = Integer.parseInt(nachKommaString);

dann hast du gleich ein int- Wert und brauchst nicht mehr hin und her casten
 

chrisgl

Mitglied
Also ich habe jetzt noch etwas rumgedocktert. Stimmt schon Exceptions hatte ich einige und habe sie alle rausbekommen. Hoffe ich. Jedefalls sind bei keinen Testfällen mehr welche erschienen.

Code:
    String getZahl(){
        eingabeString=hauptprog.dezimalZahl.getText();
        return eingabeString;
    }
    
    int kommaPosition() {
        positionPunkt=(hauptprog.dezimalZahl.getText()).indexOf(".");
        positionKomma=(hauptprog.dezimalZahl.getText()).indexOf(",");
        if (positionPunkt>positionKomma) positionKomma=positionPunkt;
        System.out.println(positionKomma);
        return positionKomma;
    }
    
    
    int vorKommaZahl() { 
        if (positionKomma<0) positionKomma=0;
        vorKommaString=getZahl().substring(0,positionKomma);
        if (vorKommaString.length()==0) vorKommaString="0";
        vorKomma =(int) Float.valueOf( vorKommaString ).floatValue();
        return vorKomma;    
    }
   
    int nachKommaZahl() {
        nachKommaString=getZahl().substring(positionKomma+1,getZahl().length());
        nachKommaString=(nachKommaString+nullString).substring(0,9);
        nachKomma =(int) Float.valueOf( nachKommaString ).floatValue();
        return nachKomma;
    }

das ding ist wenn ich die gleich mit nen " nachKomma = Integer.parseInt(nachKommaString); " versuche umzuwandeln sagt er mir Exceptions an. Darum habe ich es einfach so probiert und es ging. Bin aber leider net dahinter gestiegen warum dieses parseInt net geht.
Beim substring() muss noch ein Anfang und ein Ende übergeben werden.
Dieses Problem mit den 45.008 und 45.8 wo die Ausgabe gleich war habe ich durch anhängen von 0 gelöst nullString="000000000" dann habe ich einfach alles abgeschnitten was eine bestimmte Länge überschreitet.
Vielleicht gibt es noch eine elegantere Methode die Nullen ran zubasteln. Wenn ja schreibt mal.
So dann
Christian
 

anfänger

Mitglied
nein. bei suvstring gibt es zwei Methoden. bei einer muss man anfang und ende übergeben und dann gibt es noch eine, bei der nur der anfang übergeben werden muss und dass ist das ende der ende vom string
 

chrisgl

Mitglied
ohhhh gut das wusste ich nicht. tschuldigung wenn ich da etwas vorschnell war.
aber wieso nimmt er dieses parseInt nicht?
 

L-ectron-X

Gesperrter Benutzer
Probiere mal diesen Schnipsel aus.
Hier hast du quasi keine Rundungsfehler, weil nur der eingegebene String bearbeitet wird. Diesen kannst du dann für Berechnungen weiter in Zahlen parsen.
Code:
import java.io.*;

public class ZahlAbschneiden {
  public ZahlAbschneiden() {
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String str = null;
    try {
      System.out.print("Gib eine Zahl ein! ");
      str = in.readLine();
      str = abschneiden(str);
      str = formatieren(str);
      System.out.println("Die erzeugte Zahl lautet: "+str);
    }
    catch(IOException e) {
       System.out.println("Fehler bei Eingabe!");
    }
    catch(ArrayIndexOutOfBoundsException ex) {
      System.out.print("Starte neu und gib eine Kommazahl ein!");
    }
  }
  
  private String abschneiden(String str) throws ArrayIndexOutOfBoundsException {
    String[] strArr = str.split(",");
    return strArr[1];
  }
  
  private String formatieren(String str) {
    return "0,"+str;
  }

  public static void main(String[] args) {
    new ZahlAbschneiden();
  }
}
 

chrisgl

Mitglied
Vielen Dank für die zahlreichen und sehr guten Vorschläge!
Mein Problem sehe ich als gelöst an.
MfG Christian
 

chrisgl

Mitglied
Klar kann ich.
Hab noch mal das ausprobiert was hier so stand. Aber bin dann beim Folgenden geblieben. Rundet nicht mehr und ist genau.

Code:
    String getZahl(){
        eingabeString=hauptprog.dezimalZahl.getText();
        return eingabeString;
    }
    
    int kommaPosition() {
        positionPunkt=(hauptprog.dezimalZahl.getText()).indexOf(".");
        positionKomma=(hauptprog.dezimalZahl.getText()).indexOf(",");
        if (positionPunkt>positionKomma) positionKomma=positionPunkt;
        System.out.println(positionKomma);
        return positionKomma;
    }
    
    
    int vorKommaZahl() { 
        if (positionKomma<0) {
            positionKomma=getZahl().length();
            keinNachKomma=true;
        } else {
            keinNachKomma=false;
        }
        vorKommaString=getZahl().substring(0,positionKomma);
        if (vorKommaString.length()==0) vorKommaString="0";
        vorKomma =(int) Float.valueOf( vorKommaString ).floatValue();
        return vorKomma;    
    }
   
    int nachKommaZahl() {
        if (keinNachKomma==true){
            nachKomma=0;
        } else {
            nachKommaString=getZahl().substring(positionKomma+1);
            nachKommaString=(nachKommaString+nullString).substring(0,9);
            nachKomma =(int) Float.valueOf( nachKommaString ).floatValue();
        }
        return nachKomma;
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
T sortierung der eingabe nach größe Java Basics - Anfänger-Themen 5
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
ptcho Werte/Position nach dem Funktionsaufruf tauschen? Java Basics - Anfänger-Themen 1
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
I Java Mail Timeout erst nach rund 5 Minuten? Java Basics - Anfänger-Themen 9
FireHorses Einen Command erst nach einer Chateingabe aktivieren Java Basics - Anfänger-Themen 1
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
Jambolo Karten sortieren nach Rang und Farbe Java Basics - Anfänger-Themen 5
Lion.King Subtraktion nach Eingabe im Terminal Java Basics - Anfänger-Themen 7
D Programmieren nach UML Java Basics - Anfänger-Themen 2
rosima26 Java nach letzter Ziffer sortieren Java Basics - Anfänger-Themen 19
H Kompliziertes Sortieren einer ArrayList mit Objekten(Sortieren nach X und Y) Java Basics - Anfänger-Themen 11
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
volcanos List & ArrayList nach Familiennamen abfragen Java Basics - Anfänger-Themen 57
sserio Wie kann man nach einer Klasse fragen? Java Basics - Anfänger-Themen 12
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
F Suche nach betreuender Person für eine Jahresarbeit der 12. Klasse. Java Basics - Anfänger-Themen 6
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
M Bei nach oben scrollen soll Seite aktualisiert werden (Userscript mit Javascript) Java Basics - Anfänger-Themen 10
K log4j nach log4j2 überführen Java Basics - Anfänger-Themen 0
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
J Nach dem Exportieren funktioniert mein Programm nicht mehr Java Basics - Anfänger-Themen 8
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
rafi072001 Sortieren einer HashMap nach Values Java Basics - Anfänger-Themen 2
L Zahlungen nach Monat filtern Java Basics - Anfänger-Themen 2
J Jtable Eingabe nach Klick ausserhalb der Tabelle übernehmen Java Basics - Anfänger-Themen 6
I String nach Wort suchen Java Basics - Anfänger-Themen 6
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
O 2D-Array nach einer Spalte sortieren Java Basics - Anfänger-Themen 22
I Liste gruppieren nach Monat? Java Basics - Anfänger-Themen 5
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
M Nach einer erstmaligen Eingabe, eine zweite Eingabe nur noch gegen bestätigung möglich Java Basics - Anfänger-Themen 2
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
C Meldung einer Klasse nach "oben" Java Basics - Anfänger-Themen 6
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
R JDK installieren Durcheinander nach installation von SE 14.02 Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
B Umstieg von C# nach Java Java Basics - Anfänger-Themen 18
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
B String nach erstem Leerzeichen trennen Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
R Benutzereingaben als Array abspeichern nach Programmstart Java Basics - Anfänger-Themen 5
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
L Arrayliste von hinten nach vorne ausgeben Java Basics - Anfänger-Themen 10
F Array nach Objektattribut durchsuchen Java Basics - Anfänger-Themen 6
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
B String nach HTML formatieren Java Basics - Anfänger-Themen 9
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
CptK Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben