Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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
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.
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.
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?
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.
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)
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.
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.
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));
}
}
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