Ok, meine Frage passt da grade gut rein:
Wie kann ich Zahlen aufrunden?
Besuchen sie das VisualC++ - Forum
Math.Round(2.56, 1) ergibt 2,6
Math.Round(2.56, 0) ergibt 3
Hi!
Dann Convertierst du in int. Dadurch gehen die Nachkommastellen verloren.
@Franknstein:
Ganz einfach. Wenn deine Zahl genau .0 ist rundest du nicht und wenn sie höher als .0 ist dann addierst du +1.0 hinzu und konvertierst in int. So wäre das für ganze Zahlen.
Hier habe ich mal ein kleines Beispiel für Korrektes Runden:
http://www.coder-welt.de/thread.php?threadid=162&boardid=95&sid=
Code-Hacker
Aufrunden: Math.Ceiling
Abrunden: Math.Floor
Bankers Rounding: Math.Round
Arithmetisches Runden auf 'digits' Stellen (negativ = vorkomma) (ohne Garantie):
public static double Round(double d, int digits)
{
double f = Math.Pow(10,digits);
double p = d * f;
double q = Math.Floor(p);
double r = p-q;
if(r >= 0.5d)
q++;
return q / f;
}
Round(123.456,0) = 123.00
Round(123.456,1) = 123.50
Round(123.456,2) = 123.46
Round(123.456,-1) = 120.00
Round(123.456,-2) = 100.00
Round(123.456,-3) = 000.00
Original von Noodles
Math.Round(2.56, 1) ergibt 2,6
Math.Round(2.56, 0) ergibt 3
was übrigens viele nicht wissen (->IEEE754):
Math.Round(2.35, 1) ergibt 2.4
Math.Round(2.45, 1) ergibt 2.4
Math.Round(2.55, 1) ergibt 2.6
Was ist IEEE754?
Und warum rundet der bei 2,45 nicht auch auf?
Rundet der etwa auf gerade Zahlen?
@Code Hacker:
Besten Dank, das ist eine sehr gute Lösung!
--
mfg
Franknstein
Besuchen sie das VisualC++ - Forum
Und warum rundet der bei 2,45 nicht auch auf?
Rundet der etwa auf gerade Zahlen?
Genau ... das wird oft auch Banker's Rounding bezeichnet (im Gegensatz zu meinem obigen Beispiel, das arithmetisch rundet)
IEEE 754 ist ein Floating Point Standard von 1985 des IEEE (Institute of Electrical and Electronics Engineers)
Hallo,
wie kann ich denn Aufrunden, so dass ich immer nur 0,5 stellen runde?
Ich möchte z.b. 2,34 auf 2,5 aufrunden.
und 2,51 auf 3 aufrunden.
Abrunden will ich gar nicht. Kann mir da jemand helfen?
Danke schonmal
Microsoft Certified Professional (MCP)
Meine persönliche Seite: www.tomeks-world.de
Hallo tomek2k1,
vor dem Runden mit zwei malnehmen und danach durch zwei teilen.
herbivore
Danke herbivore.
Hat prima geklappt. Hätte ich eigentlich auch selber drauf kommen müssen. 😦
Microsoft Certified Professional (MCP)
Meine persönliche Seite: www.tomeks-world.de
Hallo ihr.
Ich habe folgendes Rundungsproblem.
bei mir kommen immer xxx,5 Stellen raus.
Gerundet soll nun auf xxx+1 werden.
aus 45.5 soll also 46 werden
aus 39.5 soll also 40 werden
Ich bitte um Hilfe, weil ich nun schon gebroselt habe wie verrückt aber irgedwie nicht an mein Ziel komme.
Danke schonmal im Vorraus =)
Hallo FabianS,
Math.Ceiling
herbivore
Danke für die schnelle Antwort.
Aber leider funktioniert es nicht.
Es wird immernoch abgerundet.
Anbei ein Teil des Quellcodes
for (double i = 1; i <= Zeilen; i++)
{
Summe = Summe + i;
double Quadrat_Halbe = Math.Ceiling(((i * i)/2));
Console.WriteLine("{0} {1} {2}",i,Summe,Quadrat_Halbe);
}
Ich hoffe weiterhin auf Hilfe.
MfG Fabian
Hallo FabianS,
du rechnest mit int. Demzufolge ist das Ergebnis auch int. Du musst mit double o.ä. rechnen (oder zumindest dahin casten), damit das Ergebnis Nachkommastellen hat, die dann aufgerundet werden können.
herbivore
Eigentlich Dachte ich, dass double ein Floatpoint Datentyp ist. Zumal meine Ausgabe mit Math.Round() auch auf Kommastellen erfolgt.
noch eine Idee ? =)
Hallo FabianS,
Eigentlich Dachte ich, dass double ein Floatpoint Datentyp ist
*schrei*! Wie kann man einen double nur i nennen??? Ok, dann ist meine Aussage "du rechnest mit int" natürlich falsch.
noch eine Idee?
Dein Code läuft bei mir wie gewünscht.
herbivore
Bei mir leider nicht. Alles ab X,5 wird abgerundet. Komisch, woran kann das liegen?
Hallo FabianS,
die mir plausibelste Erklärung ist, dass du in einer Parallelwelt lebst, in der Ceiling als Floor definiert ist. 🙂
Oder anderes ausgerdrückt: Ich kann mir keinen Grund vorstellen, warum es nicht gehen sollte.
herbivore
using System;
class Application
{
static void Main()
{
Console.WriteLine("Bitte geben Sie die Menge der Zeilen ein:");
double Zeilen = Convert.ToDouble(Console.ReadLine());
double Summe = 0;
Console.WriteLine("Zeilenzahl Summe Quadrat/2");
for (double i = 1; i <= Zeilen; i++)
{
Summe = Summe + i;
double Quadrat_Halbe = Math.Ceiling(((i * i)/2));
Console.WriteLine("{0} {1} {2}",i,Summe,Quadrat_Halbe);
}
}
}
Das hier ist der Quellcode.
Ab Zeile 4 sollte gerundet 9 und nicht 8 erscheinen.
(ich teste immer mit 10 zeilen)
Hoffe jemand findet das Problem =)
[EDIT]Bitte Code-Tags verwenden[/EDIT]
kein Kommentar meinerseits. Ihr habt alle recht. Mein Aufgabensteller hat den Fehler gemacht. Im Ausdruck seiner Vorgabe war statt der 8 eine 9 die Aber falsch sein muss.Und ich Zweifel schon an mir selbst🙂
Hallo
kann mir jemand sagen, wie ich mit ganzen Zahlen runden kann?
das heisst z.b 104 ==> 100 und 106 ==> 110
greetz
Torkel
Hallo torkel,
Zahl durch zehn teilen, Runden, mit zehn multiplizieren.
herbivore
Original von cdr
Aufrunden: Math.Ceiling
Abrunden: Math.Floor
Bankers Rounding: Math.RoundArithmetisches Runden auf 'digits' Stellen (negativ = vorkomma) (ohne Garantie):
public static double Round(double d, int digits) { double f = Math.Pow(10,digits); double p = d * f; double q = Math.Floor(p); double r = p-q; if(r >= 0.5d) q++; return q / f; }
Round(123.456,0) = 123.00
Round(123.456,1) = 123.50
Round(123.456,2) = 123.46
Round(123.456,-1) = 120.00
Round(123.456,-2) = 100.00
Round(123.456,-3) = 000.00
Oder so.
Original von Vellas
Hi!Dann Convertierst du in int. Dadurch gehen die Nachkommastellen verloren.
@Franknstein:
Ganz einfach. Wenn deine Zahl genau .0 ist rundest du nicht und wenn sie höher als .0 ist dann addierst du +1.0 hinzu und konvertierst in int. So wäre das für ganze Zahlen.Hier habe ich mal ein kleines Beispiel für Korrektes Runden:
>Code-Hacker
Hallo Zusammen
Habe neu mit C# begonnen und habe mir auch schon ein kleines Programm zusammengeschustert. Jetzt stehe ich aber genau vor der obigen Problematik, dass ich eine Zahl habe die immer auf die nächste Ganzzahl aufgrundet werden soll. D.H 10.000 ergibt 10 und alles was > 10.00 ist soll auf 11 aufgerundet werden. Das Beispiel im obigen Test wäre genau meine Lösung aber leider funktioniert der Link mit dem Codebeispiel nicht. Kann mir da jemand weiterhelfen. Besten Dank. Gruss
Hallo hockey32,
Math.Ceiling
herbivore
nun habe ich auch ein passendes problem, mit meinem kleinen programm das soweit perfekt funktioniert.
Es soll nur automatisch auf und abrunden.
Der Code:
NeueLigaAufstieg = (Math.Round(Convert.ToDouble(AlteLiga),0)) / 4;
Leider funktioniert es so nicht, es komtm dennoch ein wert mit 2 nach komma stellen raus, es soll aber aufgerundet/oder abgerundet zur naechsten ganz zahl werden.
Na wenn du ganz zum Schluss nochmal durch 4 teilst, dann kann es natürlich Nachkommastellen geben.
njöt hast recht ich idiot
heute is echt nicht mein tag 😉
Hallo,
wie kann ich immer auf volle Zahl aufrunden?
Also
2.6 => 3
2.1 => 3
HAT SICH ERLEDIGT: Math.Ceiling()
entschuldigung für die übereilte Frage.