Einmal Runden ohne alles

Status
Nicht offen für weitere Antworten.
D

DerIch

Gast
Moin, ich soll ein Programm zum Runden von Zahlen schreiben, darf aber math.round oder BigDecimal nicht verwenden.
Hab also selbst eins gemacht, dass nicht so ganz funktioniert. Was mache ich falsch?
Code:
public class Round2 {
  
  static double runde(double x, int stellen){

    x = x*Math.pow(10,stellen);
    String zahl = Double.toString(x);

    double wert;
    int rundungszahl = zahl.charAt(stellen);
    int pos = zahl.charAt(stellen+1);
      if (pos < 5)
        wert =  rundungszahl/Math.pow(10,stellen);
      else
        wert = (rundungszahl+1)/Math.pow(10,stellen);
      return wert;



  }
  public static void main(String[] args) {
    double x;
    int stellen;
      x = Double.parseDouble(LIES.liesWort("Geben Sie die zu rundende Zahl ein:"));  
      stellen = LIES.liesInt("Auf wieviele Stellen soll gerundet werden? ");           
      double zahl = runde(x,stellen);                                      
      System.out.println("--->"  + zahl  );
  }
    
}
 
S

SlaterB

Gast
> Hab also selbst eins gemacht, dass nicht so ganz funktioniert.

günstig wären falsche Beispiele oder Fehlermeldungen

-----------------

int rundungszahl = zahl.charAt(stellen);
int pos = zahl.charAt(stellen+1);

charAt liefert nur ein Zeichen aus dem String, also maximal eine Ziffer, in deiner Verwendung aber nur
den Zeichencode dieser Ziffer (z.B. ist der Zeichencode von '0' = 48 ),
auf keinen Fall kommst du so an die gesamte Zahl von Anfang an bis zur gesuchten Stelle

versuch mal was mit den Operationen String.substring() und Integer.parseInt(),

-------------

bedenke auch dass Zahlen < 0 ein führendes Minus-Zeichen haben

-------------

solange du noch am Programm selber arbeitest nimm doch diese nervigen Benutzereingaben raus,
die tragen doch recht wenig zum Problem bei

mit
Code:
 public static void main(String[] args) {
    double x;
    int stellen;
      x = 50.86;
      stellen = 1;
      double zahl = runde(x,stellen);                                     
      System.out.println("--->"  + zahl  );
  }
läßt sich schneller testen als mit

Code:
 public static void main(String[] args) {
    double x;
    int stellen;
      x = Double.parseDouble(LIES.liesWort("Geben Sie die zu rundende Zahl ein:")); 
      stellen = LIES.liesInt("Auf wieviele Stellen soll gerundet werden? ");           
      double zahl = runde(x,stellen);                                     
      System.out.println("--->"  + zahl  );
  }

;)
 
D

DerIch

Gast
Ok, hab es jetzt mal so geändert:
Code:
public class Round2 {
  
  static double runde(double x, int stellen){

    x = x*Math.pow(10,stellen);
    String zahl = Double.toString(x);

    double wert;

    int pos = zahl.charAt(stellen+1);
    String rundungszahl = ;
      if (pos < 5)
        wert =  (Double.parseDouble(rundungszahl))/Math.pow(10,stellen);
      else
        wert = (Double.parseDouble(rundungszahl+1))/Math.pow(10,stellen);
      return wert;

Jetzt fehlt mir nur noch was für die rundungszahl. Wie kann ich die erhöhen, wenn ich aufrunden will?
 

messi

Bekanntes Mitglied
Code:
public static double runde(double x, int stellen) {
    double magn = Math.pow(10, stellen); //Oder hier Schleife 0..stellen: magn *= 10.0
    x *= magn;
    x = (double) (long) (x + 0.5);
    x /= magn;
    return x;
}
 
S

SlaterB

Gast
messis Lösung ist natürlich schöner sodass sich die String-Geschichte bis auf Übungszwecke eigentlich erledigt,
aber was meinst du mit
> Ok, hab es jetzt mal so geändert

da ist doch noch überhaupt nix hin zur richtigen Lösung geändert außer das du eine Zeile gelöscht hast ;)

und die Frage
> Jetzt fehlt mir nur noch was für die rundungszahl. Wie kann ich die erhöhen, wenn ich aufrunden will?
wirkt auch deplaziert,
das Auf- und Abrunden ist so ziemlich das einzig funktionierend aussehende darin ;)
(aber Vorsicht bei negativen Zahlen)
 

SnooP

Top Contributor
1. Frag doch mal deinen Hiwi ;)

2. Benutze keinen String - das klingt erst einfach - ist aber nicht unbedingt der Fall...

3. Überlege dir mathematische Operationen mit denen du an die letzte Stelle einer Zahl kommst.
Das Math.pow sieht ja schon ganz gut aus, um aus einer 1,2345 Zahl sowas wie 12345,... zu machen - ich würde das allerdings nicht in der Variablen x speichern, sondern in einer internen - z.B. "zahl" vom Typ long (entsprechend double). Weil du für deine interne Berechnung lediglich ganze Zahlen brauchst: long zahl = (long) Math.pow...

4. Stichwort mathematische Operationen: Wie kann man bei einer Dezimalzahl das Komma nach links verschieben? Sagt dir Modulo was? ;) ... zur Not hilft auch Rechnen mit einem Taschenrechner um das mal auszuprobieren - der Windows-Taschenrechner oder aber unter Linux z.B. "kcalc" sind dir dabei sicherlich behilflich.

5. Denke an die Fallunterscheidung für negative Zahlen... du musst sowohl bei 5 aufrunden, als auch bei -5 abrunden...

6. Stichwort Messis Lösung: sieht sehr gut aus... funktioniert aber (noch) nicht für negative Zahlen .. und speziell dazu: ich dachte wir lösen keine Hausaufgaben direkt?
 

Bleiglanz

Gesperrter Benutzer
Code:
 x = (double) (long) (x + 0.5);
ist für Anfänger verwirrend weil ein unnötiger cast drin ist
Code:
 x = (long) (x + 0.5);

im übrigen gibts noch eine Lösung ohne Math.round oder BigDecimal
Code:
    public static double rundeTrick(double x, int stellen){
        NumberFormat nf = NumberFormat.getInstance(Locale.US);
        nf.setGroupingUsed(false);
        nf.setMaximumFractionDigits(stellen);
        return Double.valueOf(nf.format(x)).doubleValue();
    }
 

SnooP

Top Contributor
Die Lösung würde ich als Hiwi aber auch nicht haben wollen ;) ... die Idee war, dass die Studenten natürlich was selbst programmieren sollen und keine Tricks benutzen ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Kann man einen Iterator nur einmal verwenden Java Basics - Anfänger-Themen 5
W Schleife und einmal variable++ zu viel Java Basics - Anfänger-Themen 20
S Arrayausgabe und nur einmal ein Zeichen davor Java Basics - Anfänger-Themen 12
O 2d Array einmal Eins Java Basics - Anfänger-Themen 2
marcooooo einmal noch schnell hilfe bitte:/ Java Basics - Anfänger-Themen 2
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
S Wie erhöhe ich den Wert von mehren Integers auf einmal? Java Basics - Anfänger-Themen 5
J Operatoren Random wird nur einmal erstellt und dann immer verwendet Java Basics - Anfänger-Themen 2
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Array-Liste nur einmal ausgeben Java Basics - Anfänger-Themen 8
M Erste Schritte Neuen Frame nur einmal offen haben Java Basics - Anfänger-Themen 6
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
P JFrame nur einmal öffnen Java Basics - Anfänger-Themen 4
R ArrayList - System.out.println nur einmal, statt 10 mal Java Basics - Anfänger-Themen 5
S Threads run - Funktion wird nur einmal ausgeführt. Java Basics - Anfänger-Themen 8
C Animation nur einmal durchführen Java Basics - Anfänger-Themen 3
Lord.Djerun (Taschenrechner Netbeans) Komma nur einmal schreiben & 0 ersetzen Java Basics - Anfänger-Themen 1
N Erste Schritte JButton reagiert nur einmal. Java Basics - Anfänger-Themen 12
N Klassen Class nur einmal ausführen und sie speichert daten für alle anderen classes? Java Basics - Anfänger-Themen 3
R Double: auf einmal Komma statt Punkt Java Basics - Anfänger-Themen 4
P gui fenster nur einmal aufrufen Java Basics - Anfänger-Themen 5
O Noch einmal Methoden Java Basics - Anfänger-Themen 9
K Regex - Jeder buchstabe nur einmal Java Basics - Anfänger-Themen 7
O Threads Ein Thread läuft exakt einmal Java Basics - Anfänger-Themen 4
T Zufalls jedoch jede nur einmal Java Basics - Anfänger-Themen 10
R (Math.random()*49) zahl darf aber nur einmal gezogen werden Java Basics - Anfänger-Themen 11
D ???:L Bitte einmal mit drüber nachdenken Java Basics - Anfänger-Themen 5
M Mehrere Methoden eines Objekts auf einmal ausführen Java Basics - Anfänger-Themen 3
J äußere for schleife wird nur einmal durchlaufen Java Basics - Anfänger-Themen 8
H Alle Array-Elemente auf einmal überprüfen? Java Basics - Anfänger-Themen 10
S button nur einmal verwendbar Java Basics - Anfänger-Themen 3
A String wird nur einmal an den StringBuffer angehängt Java Basics - Anfänger-Themen 10
I Memory-Spiel Feld nur einmal mischen Java Basics - Anfänger-Themen 2
W Java ProcessBuilder - externer Prozess nur einmal starten und mehrere Inputs geben Java Basics - Anfänger-Themen 7
L Mehrere Objekte einer Klasse aber nur einmal Konstruktor aufruf? Java Basics - Anfänger-Themen 2
J Batch Datei Problem, Programm nur einmal starten Java Basics - Anfänger-Themen 9
L SystemTray-displayMessage nur einmal Anzeigen Java Basics - Anfänger-Themen 2
1 OOP Zugriff auf eine Methode nur einmal die Sekunde Java Basics - Anfänger-Themen 8
K methode wird nur einmal korrekt durchlaufen Java Basics - Anfänger-Themen 4
I Werte werden auf einmal negativ Java Basics - Anfänger-Themen 3
G Zufallszahlen die alles einmal vorkommen Java Basics - Anfänger-Themen 15
K Animiertes Gif nur einmal abspielen Java Basics - Anfänger-Themen 3
A paar bilder auf einmal Java Basics - Anfänger-Themen 3
R Kann man Threads nur einmal starten? Java Basics - Anfänger-Themen 4
M Javaprogramm darf nur einmal gestartet werden Java Basics - Anfänger-Themen 3
G Methode nur einmal ausführen Java Basics - Anfänger-Themen 5
T string: jeden alphabetsbuchstaben nur einmal enthalten Java Basics - Anfänger-Themen 8
G Thread nur einmal starten Java Basics - Anfänger-Themen 5
F Bild einmal aus Datei laden und in Klasse speichern Java Basics - Anfänger-Themen 3
ARadauer jedes Element in Liste nur einmal Java Basics - Anfänger-Themen 2
G Gleiche Aktionen verarbeiten (aber nur einmal Code)? Java Basics - Anfänger-Themen 2
J Verständnisfrage: DB einmal öffnen oder jedesmal von neuem Java Basics - Anfänger-Themen 2
N Thread soll nur einmal ausgeführt werden, aber wie stoppen? Java Basics - Anfänger-Themen 5
E *.exe EINMAL starten (bei klicken kein zweites mal) Java Basics - Anfänger-Themen 5
I Stack ist auf einmal empty Java Basics - Anfänger-Themen 3
B Zufallszahlen je einmal in Array einfügen Java Basics - Anfänger-Themen 4
M Klasse in Runden Klammern bei Objektimplementierung Java Basics - Anfänger-Themen 4
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
Z Runden Arraylist Java Basics - Anfänger-Themen 9
A Random Double mit Math.round() runden? Java Basics - Anfänger-Themen 1
J Hilfe beim Runden Java Basics - Anfänger-Themen 4
S Runden von Zahlen Java Basics - Anfänger-Themen 1
J Fehler beim Runden Java Basics - Anfänger-Themen 3
T ungewolltes Runden Java Basics - Anfänger-Themen 5
K Double Wert runden und in Int umwandeln Java Basics - Anfänger-Themen 7
A Kaufmännisches Runden mit BigDecimal Java Basics - Anfänger-Themen 14
M Double Wert auf 2 Kommastellen runden Java Basics - Anfänger-Themen 2
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
F Zeiteinheit auf ganze Zahl runder runden Java Basics - Anfänger-Themen 4
L Nachkommastellen Runden, Problem mit Syntax " }" Java Basics - Anfänger-Themen 2
J Auf den nächsten Zehner runden? Java Basics - Anfänger-Themen 4
C Nach Berechnung runden und Wert ausgeben Java Basics - Anfänger-Themen 7
A Richtig runden Java Basics - Anfänger-Themen 9
M Double-Zahlen auf Intervalle runden Java Basics - Anfänger-Themen 3
H Runden klappt nicht Java Basics - Anfänger-Themen 10
S Zahlen runden Java Basics - Anfänger-Themen 5
E Runden Java Basics - Anfänger-Themen 2
U Erste Schritte Kommazahl runden Java Basics - Anfänger-Themen 17
K Große Gleitkommazahlen runden Java Basics - Anfänger-Themen 8
Luk10 Nachkommastellen runden Java Basics - Anfänger-Themen 2
S Runden eines doubles auf n nachkommastellen Java Basics - Anfänger-Themen 10
H Zahl auf 2 nachkomma stellen runden Java Basics - Anfänger-Themen 13
M Float auf bestimmte Nachkommazahl runden Java Basics - Anfänger-Themen 3
I Runden / Zweikommastellen geht nicht... Java Basics - Anfänger-Themen 3
J Konvertieren und Runden von double in int Java Basics - Anfänger-Themen 3
H Datentypen Rechnen und Runden Java Basics - Anfänger-Themen 2
O Runden - x/100 liefert long zurück Java Basics - Anfänger-Themen 7
T Runden mit Präzision vs. Runden mit Nachkommastellen Java Basics - Anfänger-Themen 4
J Runden mit printf Java Basics - Anfänger-Themen 3
-horn- Runden auf x-Stellen wirklich nur so umständlich? Java Basics - Anfänger-Themen 9
F (Verständnis)Problem: Zahl auf 2 Nachkommastellen runden Java Basics - Anfänger-Themen 5
Rika Runden Java Basics - Anfänger-Themen 6
F Werte runden Java Basics - Anfänger-Themen 11
N Runden Java Basics - Anfänger-Themen 6
J Runden auf 2 Nachkommastellen ? Java Basics - Anfänger-Themen 5
D runden ohne math! (zur not auch mit) Java Basics - Anfänger-Themen 9
D Einfache Funktion zum kaufmännischen runden Java Basics - Anfänger-Themen 8
J richtig runden Java Basics - Anfänger-Themen 4
B Double je nach Nachkommastellen kfm runden Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben