Laden...

wie kann ich zahlen runden ???

Erstellt von IhateWin vor 20 Jahren Letzter Beitrag vor 15 Jahren 58.260 Views
I
IhateWin Themenstarter:in
79 Beiträge seit 2004
vor 20 Jahren
wie kann ich zahlen runden ???

Wie Kann ich unter C# zahlen runden ????

N
4.644 Beiträge seit 2004
vor 20 Jahren

Math.Round();

F
529 Beiträge seit 2003
vor 20 Jahren

Ok, meine Frage passt da grade gut rein:
Wie kann ich Zahlen aufrunden?

Besuchen sie das VisualC++ - Forum

N
4.644 Beiträge seit 2004
vor 20 Jahren

Math.Round(2.56, 1) ergibt 2,6
Math.Round(2.56, 0) ergibt 3

I
IhateWin Themenstarter:in
79 Beiträge seit 2004
vor 20 Jahren

und wenn ich will das aus 2,56 2 wird ????

V
842 Beiträge seit 2003
vor 20 Jahren

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

C
980 Beiträge seit 2003
vor 20 Jahren

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

C
980 Beiträge seit 2003
vor 20 Jahren

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

F
529 Beiträge seit 2003
vor 20 Jahren

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

C
980 Beiträge seit 2003
vor 20 Jahren

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)

T
86 Beiträge seit 2005
vor 18 Jahren

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

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo tomek2k1,

vor dem Runden mit zwei malnehmen und danach durch zwei teilen.

herbivore

T
86 Beiträge seit 2005
vor 18 Jahren

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

F
6 Beiträge seit 2006
vor 18 Jahren
Aufrunden in C#

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 =)

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo FabianS,

Math.Ceiling

herbivore

F
6 Beiträge seit 2006
vor 18 Jahren

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

49.485 Beiträge seit 2005
vor 18 Jahren

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

F
6 Beiträge seit 2006
vor 18 Jahren

Eigentlich Dachte ich, dass double ein Floatpoint Datentyp ist. Zumal meine Ausgabe mit Math.Round() auch auf Kommastellen erfolgt.

noch eine Idee ? =)

49.485 Beiträge seit 2005
vor 18 Jahren

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

F
6 Beiträge seit 2006
vor 18 Jahren

Bei mir leider nicht. Alles ab X,5 wird abgerundet. Komisch, woran kann das liegen?

49.485 Beiträge seit 2005
vor 18 Jahren

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

F
6 Beiträge seit 2006
vor 18 Jahren

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]

F
234 Beiträge seit 2006
vor 18 Jahren

Wieso das denn ? 4*4/2 ist bei mir genau 8.

F
6 Beiträge seit 2006
vor 18 Jahren

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🙂

F
234 Beiträge seit 2006
vor 18 Jahren

Wer nicht arbeitet, macht auch keine Fehler 😁

T
506 Beiträge seit 2005
vor 18 Jahren

Hallo

kann mir jemand sagen, wie ich mit ganzen Zahlen runden kann?

das heisst z.b 104 ==> 100 und 106 ==> 110

greetz

Torkel

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo torkel,

Zahl durch zehn teilen, Runden, mit zehn multiplizieren.

herbivore

F
234 Beiträge seit 2006
vor 18 Jahren

Original von cdr
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

Oder so.

H
4 Beiträge seit 2007
vor 16 Jahren

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

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo hockey32,

Math.Ceiling

herbivore

H
4 Beiträge seit 2007
vor 16 Jahren

hallo herbivore

vielen dank. das klappt perfekt.

L
34 Beiträge seit 2008
vor 16 Jahren

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.

S
8.746 Beiträge seit 2005
vor 16 Jahren

Na wenn du ganz zum Schluss nochmal durch 4 teilst, dann kann es natürlich Nachkommastellen geben.

L
34 Beiträge seit 2008
vor 16 Jahren

njöt hast recht ich idiot
heute is echt nicht mein tag 😉

E
346 Beiträge seit 2007
vor 15 Jahren

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.