Erste Schritte Kommazahl runden

user

Mitglied
Hallo Leute,
dies ist mein erster Beitrag.
Kann mir wer von euch sagen wie ich eine Kommazahl zB.: 711.2880 € auf 711.30€ aufrunde?
Ganz wichtig hierbei ist, dass wir nur den datentyp int verwenden dürfen.
Danke schon mal im voraus.
 

faetzminator

Gesperrter Benutzer
In welchem Datentypen hast du denn deine Zahl? Wenns ein [c]int[/c] ist, müsste da dann [c]7112880[/c] drin stehen. Wenn da am Schluss [c]71130[/c] drin stehen sollte, einfach [c](7112880 + 500) / 1000 * 10[/c] - wenn ich mich nicht irre :)
 

user

Mitglied
Wow, ihr seit ja schnell :).
Das hab ich vergessen zu erwähnen.
So sieht mein code aus.
Java:
//Höhen und Länge des 1. Segmentes werden eingelesen.
		
		Out.print ("Geben Sie die Höhe 1 des Segmentes in cm ein: ");
		int h1=In.readInt();

		Out.print ("Geben Sie die Höhe 2 des Segmentes in cm ein: ");
		int h2=In.readInt();
		
		Out.print ("Geben Sie die Länge des Segmentes in cm ein: ");
		int l=In.readInt();
	
		//Fläche und Kosten ermitteln
		
		int flaeche;
		flaeche = (h1+h2)*l/2; 				// Berechnung der Fläche des Segmentes in cm2
		
		
		int kosten1s; 						// Berechnung der Kosten für das Segment
		kosten1s=flaeche*96;
		
	
		int mhoehe1;
		mhoehe1= (h1+h2)/2;					// Berechnung der mittleren Höhe des Segmentes
	

		//Ausgabe Fläche und Kosten für das 2. Segment
		
		
		Out.print("Abmessungen Segment (l, h1, h2 - in cm): ");
			Out.print(+l);
			Out.print(" "+h1);
			Out.println(" "+h2);
			
		Out.println("-----Kosten für dieses Segment-----");
		Out.println("Länge= " + l + ", " + "Mittlere Höhe= "+ mhoehe1);

		
		Out.print("Fläche= ");
		Out.print(flaeche/10000);
		Out.print(".");
		Out.print(((flaeche%10000)+50)/100);
		Out.println("m2");
		
		Out.print("Preis= ");
		Out.print(kosten1s/10000);
		Out.print(".");
		Out.println((((kosten1s%10000)+50)/100)*96);

Ausgegeben wird das:
-----Kosten für 1. Segment-----
Länge= 318, Mittlere Höhe= 233
Fläche= 7.41m2
Preis= 711.2880

Also bei der Fläche funktionierts über den Umweg mit der modulo Funktion.
 

jgh

Top Contributor
also grundsätzlich kann man int´s runden indem man durch eine Zahl x dividiert und anschließend wieder mit x multipliziert.

Ansonsten gibt es in der Math-Klasse die Methode Math.round(), die allerdings ein double oder float als Argument erwartet...
 

faetzminator

Gesperrter Benutzer
Wie kommst du da drauf?

Da hab ich mich um eine Stelle vertan ;) Ziel war [c]7112800[/c] -> [c]7113300[/c] -> [c]7113[/c] -> [c]71130[/c] ;)

Edit: Natürlich funktionierts! [c]System.out.println((7112880 + 500) / 1000 * 10);[/c] -> [c]71130[/c].
Edit2: @kaetzacoatl und TO: Wenn man weiss, dass int's einfach abgeschnitten werden, macht meine "Formel" Sinn. Zuerst +, damit "gerundet" und nicht abgeschnitten wird, dann durch mehr als gewollt (für "runden"), dann wieder mal rechnen.
 
Zuletzt bearbeitet:

user

Mitglied
Danke nochmal für die schnelle Hilfe.
Das ist Flächenformel für ein Trapez.:)

Ich habs im prinzip jetzt genau so gelöst wie bei den m2 gelöst.

Hatte nur einen Fehler drinnen.
Java:
		Out.print("Preis= ");
		Out.print(kosten/10000);
		Out.print(".");
		Out.print((kosten%10000+50)/100);
		Out.println(" EUR");
 

user

Mitglied
Ein Problem habe ich jedoch noch.
Beim Euroendergebnis kommt statt dem richtigen Ergebnis 719,04 Euro, 719,4 Euro raus. Das heißt, dass die Null vor dem 4 einfach wegfällt. Wie kann das sein?
 

Bernd Hohmann

Top Contributor
Hier meine Hilfsroutine für kaufmännische Rundung, hab ich aus einer BASIC-Routine von mir selber abgeschrieben.

'decimals' gibt die Anzahl der gewünschten Nachkommastellen an.

Code:
	public final static double nround(double value, int decimals) {
		//Nround# = SGN(value#) * INT(ABS(value#) * 10# ^ decimals% + .5000001) / (10# ^ decimals%)
		double factor = Math.pow(10d, decimals);
		return Math.signum(value) * ((int) (Math.abs(value) * factor + 0.5000001d)) / factor;
	}

Für eine Formatierung im Stil #,#0 mal hier schauen.

Bernd
 
P

pappawinni

Gast
Also wenn ich annehme, dass String grundsätzlich erlaubt wäre, danach sieht es ja aus, dann könnte man ja für die Darstellung von z.B. 3 Nachkommastellen die gegenüber der double mit 1000 multiplizierte int in einen String wandeln und an der passenden Stelle einen Punkt reinflicken.

also grundsätzlich kann man int´s runden indem man durch eine Zahl x dividiert und anschließend wieder mit x multipliziert.

Runden versteh ich eher so, dass z.B. aus 11.5 eine 12 wird. D.h., also dass ab .5 aufgerundet und darunter abgerundet wird.
Für die Darstellung der 11.5 musste man aber mit dem 10fachen Wert arbeiten, weil ja sonst die Nachkommastelle, die für die Rundung beachtlich ist, nicht vorhanden wäre.

Weil int einfach abschneidet, liefert das:
Java:
       int x = 115;
        int y = 10;
        int z = x/y*y;
        System.out.println(z);
eben 110 und nicht etwa 120

Es wäre also (zumindest für positive Zahlen) notwendig, vor der division 5 zu addieren, also so

Java:
        int x = 115;
        int y = 10;
        int z = (x+5)/y*y;
        System.out.println(z);

um tatsächlich zu runden.

Ok, vllt. versteh den Thread ohnehin nicht wirklich.

Wenn da berechnet wird:
Code:
flaeche = (h1+h2)*l/2;
dann ist da aus meiner Sicht schon was falsch.
Da müsste man wohl eher mit 5 multiplizieren, 5 addieren und das ganze dann durch 10 dividieren,
statt einfach durch 2 zu dividieren, sonst wäre das Ergebnis potentiell schon beschnitten statt gerundet.
Statt am Ende bei der Ausgabe z.B. durch 1000 zu dividieren wäre hier mit Zeichnenketten zu operieren.
Da muss dann halt auch beachtet werden, dass evtl. noch führende Nullen anzuhängen sind, damit der Dezimalpunkt an der richtigen Stelle eingesetzt werden kann.
(Etwas komplexer würde das Ganze dann, wenn auch negative Werte vorkommen könnten)
 
Zuletzt bearbeitet von einem Moderator:

Bernd Hohmann

Top Contributor
Danke, aber wir dürfen leider keine double typen verwenden. nur int datentypen.

Dann stimmt was nicht mit Deiner Frage: "Kann mir wer von euch sagen wie ich eine Kommazahl zB.: 711.2880 € auf 711.30€ aufrunde?" - das ist eine Fliesskommazahl vom Typ double oder single.

Du kannst Festkommaarithmetrik verwenden (also mit 100 aufmultiplizieren für 2 Nachkommastellen Genauigkeit), aber bei der Ausgabe musst Du dann über eine Stringoperation das Komma setzen.

Was ich auch nicht verstehe: Was ist 711.2880 -> 711.30 für eine Rundung? Kaufmännisch gerundet wäre 711.29 das korrekte Ergebnis.

Bernd
 

user

Mitglied
Vielleicht war meine angabe etwas missverständlich.
Die Rundung ist vielleicht keine echte rundung. Ich lass mir mit %10000 die letzten 4 Kommastellen ausgeben.
Dann zähle ich 50 hinzu zB (3469 + 50 = 3519) mit /100 schneide ich dann letzten zwei Stellen ab. das ergibt dann 0.35.
Das Problem mit der Null ( statt 719,04 Euro Kamm 719,4 Euro raus) habe ich so gelöst, dass ich die Kommastelle 0.04 wieder in einen eigenen int gepackt habe und die zwei stellen einzeln ausgegeben habe.
Danke auf jeden fall für eure Unterstützung.
 

Ark

Top Contributor
Ehrlich, ich verstehe diesen Rundungsmodus auch nicht. Na ja, hier ist meine Lösung:
Java:
public final class RundenOhneGleitkomma{

	public static void main(String[] args){
		betragAusgeben(runden(7112880)); // 711 Euro und 28,8 Cent
		betragAusgeben(runden(7190400)); // 719 Euro und 4 Cent
	}

	public static long runden(long centcents){
		return (centcents + 50) / 100 * 100;
	}

	public static void betragAusgeben(long centcents){
		System.out.printf("%d.%02d%n",
			(centcents / 10000), (centcents / 100 % 100));
	}
}
Ausgabe:
Code:
711.29
719.04

Ark
 
P

pappawinni

Gast
buuh.. also die "Lösung" von User kann ja... wie soll ich sagen .. brutal ins Auge gehen.
Wenn ich das richtig seh, dann werden da die Vorkommastellen ausgegeben und anschliessend die Nachkommastellen gerundet.
Was passiert dann, wenn die Rundung der Nachkommastellen einen Übertrag in die Vorkommastellen erfordert....
Also ne Rundung von .9999...ohoh
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B java.time Duration mit Kommazahl? Java Basics - Anfänger-Themen 4
Ponychan95 Kommazahl als richtigen Währungsbetrag ausgeben Java Basics - Anfänger-Themen 1
A Folgende Nullen einer Kommazahl aus String entfernen Java Basics - Anfänger-Themen 3
J Datentypen Umwandlung von Kommazahl in Punktzahl Locale DE auf US Java Basics - Anfänger-Themen 5
B Kommazahl mit 2 Nachkomma-Stellen im jFormattedTextField Java Basics - Anfänger-Themen 6
deetee Kommazahl richtig darstellen 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
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
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

Ähnliche Java Themen

Neue Themen


Oben