Runden mit Präzision vs. Runden mit Nachkommastellen

Status
Nicht offen für weitere Antworten.

timriddance

Mitglied
Hallo zusammen

Bin mich gerade etwas mit dem (leidigen) Thema des Rundens am beschäftigen, bzw. selber Methoden am schreiben, die die Klasse Math verwenden.

Habe eine Methode implementiert, die auf eine beliebige Anzahl Nachkommastellen runden kann, das war auch ziemlich einfach:

Java:
	/**
	 * Rounds a certain value to the number of decimal_places
	 * Returns a string containing the rounded number and a decimal point
	 **/
	public static String toDecimalPlace(double value, int decimal_places){
		// compute the mover
		int mover = (int)Math.pow(10, decimal_places);
		// round
		int rounded = (int)Math.round(value*mover);
		String output = ""+rounded/mover;
		int fraction = rounded%mover;
		
		// look for decimal places
		if(decimal_places > 0){
			output += ".";
			// check zeros, write fraction
			for(int n=1; n < decimal_places; n++){
				if(fraction < Math.pow(10, n))
				output += ("0");
			}
			output += fraction;
		}
		
		return output;
	}

Nun möchte ich noch eine folgende Methode implementieren (hab dazu schon etwas Pseudocode geschrieben):

Java:
	/**
	 * Rounds a certain value to a number with a certain precision
	 * E.g. a value of 0.503 with a precision of 2 would return 0.5, or a value of 2307.4 with a precision of 3
	 * would return 2310.
	 **/
	public static void toPrecision(double value, int precision){
		
                // find out how many integers there are 
		int count = 0;
		while((int)(value/Math.pow(10,count)) != 0){
			count++;
		}
                
		// move the decimal point for rounding
                          // difference = precision - count
                          // multiply value with 10^difference
		// round using math.round()
		// move back the decimal point
	}

Ich scheitere schon beim ersten Punkt.. anstatt mir die korrekte Anzahl Stellen vor dem Komma zu liefern, "endet" das Ganze in einer Endlosschleife, d.h. count wird anhaltslos erhöht, dabei sollte doch z.B. bei der Eingabe von 102.2 count den Wert 3 erhalten. Was mache ich falsch?
Das Ziel wäre, je nachdem, wie viel Vorkommastellen (integers) bzw. Nachkommastellen (decimal places) eine Zahl hat, das Komma zu schieben und dann die Zahl mit Math.round() zu runden, danach das Komma wieder "zurückzuschieben". Bis jetzt habe ich nicht herausgefunden, wie ich das für Werte wie z.B. 2324.34 auf der einen Seite und Werte wie 0.0034 auf der anderen Seite mit dem gleichen Algorithmus lösen kann, deshalb ist bis jetzt nur der Weg für den ersten Fall erläutert.
 
S

SlaterB

Gast
> Was mache ich falsch?

Texte zu schreiben statt richtiger Testprogramme

Java:
public class Test {
	public static void main(String[] args) throws Exception {
		toPrecision(102.2);
	}

	public static void toPrecision(double value) {

		int count = 0;
		while (count < 20 && ((int) (value / Math.pow(10, count)) != 0)) {
			System.out.println("           count: " + count + " -> "
					+ Math.pow(10, count) + ", "
					+ ((int) (value / Math.pow(10, count))));
			count++;
		}
		System.out.println("fertig für count: " + count + " -> "
				+ Math.pow(10, count) + ", "
				+ ((int) (value / Math.pow(10, count))));
	}
}
count: 0 -> 1.0, 102
count: 1 -> 10.0, 10
count: 2 -> 100.0, 1
fertig für count: 3 -> 1000.0, 0

funktioniert
 

timriddance

Mitglied
Und wo ist jetzt hier der Unterschied zu meinem Code (abgsehen von count < 20 und der Textausgabe) ?

Anscheinend scheint es bei dir ja zu funktionieren... Aber von der Struktur her ist es ja genau gleich.
Und wie meinst du das mit dem Texte schreiben? Hab mal gelesen, dass es gut ist, eine Aufgabe zuerst in Pseudocode zu verfassen, wenn man sich noch nicht an die Implementierung wagen will.
 
S

SlaterB

Gast
ich meine, dass du unüberprüfbar schreibst, dass es bei dir nicht geht,
dazu löblich etwas Code, aber kein vollständiges Programm (main-Methode!, kopieren, starten, fertig)

es ist derzeit kein Problem ersichtlich,
wenn mein Programm bei dir auch wieder zu einer Endlosschleife führt, dann schon, aber fast unlösbar,
ansonsten liegt der Fehler vielleicht in anderen Programmteilen

> Hab mal gelesen, dass es gut ist, eine Aufgabe zuerst in Pseudocode zu verfassen, wenn man sich noch nicht an die Implementierung wagen will.

löblich
 

timriddance

Mitglied
Sorry, das war wohl wirklich ein Fehler meinerseits, vielleicht habe ich es einmal zu wenig kompiliert, was weiss ich.
Auf jeden Fall funktioniert der Counter nun. Aber der Lösung meines Problems bin ich nicht näher gekommen.. es muss doch irgendwie einfacher gehen als oben beschrieben...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
J Runden Java Basics - Anfänger-Themen 4
G divisions ergebnis runden Java Basics - Anfänger-Themen 3
P Runden auf eine Nachkommastelle Java Basics - Anfänger-Themen 18
S Wie runden man noch mal auf bestimmte stellen? Java Basics - Anfänger-Themen 8
S double runden Java Basics - Anfänger-Themen 5
W Runden Java Basics - Anfänger-Themen 10
G Durch Liste iterieren und nachkommastellen runden Java Basics - Anfänger-Themen 9
C Ergebnisse auf 2 Kommastellen runden Java Basics - Anfänger-Themen 3
R Zahl runden Java Basics - Anfänger-Themen 18
M Runden eines Doublewerts auf 13 Zeichen Java Basics - Anfänger-Themen 10
A Runden Java Basics - Anfänger-Themen 5
G Kein Runden Java Basics - Anfänger-Themen 3
R "Kaufmännisch runden" Java Basics - Anfänger-Themen 12
P Automatisch auf die nächst höere zahl runden? Java Basics - Anfänger-Themen 7
F Long umwandeln und auf 2 Dezimalen runden? Java Basics - Anfänger-Themen 14
M runden Java Basics - Anfänger-Themen 9
D Einmal Runden ohne alles Java Basics - Anfänger-Themen 7
P Dezimalstellen limitieren (runden auf 2 Stellen) Java Basics - Anfänger-Themen 3
L Automatischen Runden oder Abschneiden? Java Basics - Anfänger-Themen 2
C Runden auf 2 Nachkommastellen klappt nicht||| WARUM Java Basics - Anfänger-Themen 13
S Double runden funktioniert nicht immer ? Java Basics - Anfänger-Themen 2
O Dezimal in Dual...Arraygröße & Runden Java Basics - Anfänger-Themen 4
A Bestimmt blöde Frage: Zahl runden Java Basics - Anfänger-Themen 10
K Fliesskommawert runden Java Basics - Anfänger-Themen 3
L Runden Java Basics - Anfänger-Themen 2
G Zahlen runden Java Basics - Anfänger-Themen 3
C double runden Java Basics - Anfänger-Themen 6
V Double runden Java Basics - Anfänger-Themen 6
D Zahlen runden Java Basics - Anfänger-Themen 10
F double wert formatieren und runden Java Basics - Anfänger-Themen 7
C Runden einer Altersangabe Java Basics - Anfänger-Themen 5
P double Zahl runden Java Basics - Anfänger-Themen 2
jueki Präzision bei Typumwandlung zwischen double und String Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben