| 

.NET C# Java Javascript Exception

1
Wie kann ich eine gebrochen, rationale Zahl des Typs Double auf eine bestimmte Anzahl an Nachkommastellen runden?
14.01.2011
Hubby 23 3
2 Antworten
3
Wie @Mario Priebe bereits schrieb, dient dazu die Methode Math.Round(). Wichtig beim Aufruf dieser Methode ist noch zu beachten, nach welchem Verfahren gerundet wird:

  • Es wird auf diejenige Zahl gerundet, die der zu rundenden Zahl am nächsten liegt (1.6 wird also zu 2, 1.4 hingegen zu 1).
  • Liegt eine Zahl exakt zwischen zwei Ganzzahlen (wie beispielsweise 1.5), wird auf die jeweils gerade Zahl gerundet (1.5 wird also zu 2, 2.5 wird ebenfalls zu 2, erst 3.5 wird zu 4).

Das entspricht also nicht unbedingt dem Verhalten, das man aus der Schule her kennt, wo bei .5 stets auf die nächstgrößere Ganzzahl aufgerundet wird.

Falls dieses Verhalten nicht gewünscht ist, kann der Round-Methode als dritter Parameter ein Wert der MidPointRounding-Enumeration mitgegeben werden:

  • MidPointRounding.ToEven: Entspricht dem Standardverhalten.
  • MidPointRounding.AwayFromZero: Es wird von 0 weg gerundet. Aus 1.5 wird also 2, aus -1.5 wird -2. Dieses Verhalten entspricht also dem aus der Schule bekannten.

Beispiel aus der MSDN:

// This example demonstrates the Math.Round() method in conjunction 
// with the MidpointRounding enumeration.
using System;

class Sample
{
public static void Main()
{
decimal result = 0.0m;
decimal posValue = 3.45m;
decimal negValue = -3.45m;

// By default, round a positive and a negative value to the nearest even number.
// The precision of the result is 1 decimal place.

result = Math.Round(posValue, 1);
Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, posValue);
result = Math.Round(negValue, 1);
Console.WriteLine("{0,4} = Math.Round({1,5}, 1)", result, negValue);
Console.WriteLine();

// Round a positive value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

result = Math.Round(posValue, 1, MidpointRounding.ToEven);
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, posValue);
result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero);
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, posValue);
Console.WriteLine();

// Round a negative value to the nearest even number, then to the nearest number away from zero.
// The precision of the result is 1 decimal place.

result = Math.Round(negValue, 1, MidpointRounding.ToEven);
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)", result, negValue);
result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero);
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)", result, negValue);
Console.WriteLine();
}
}
/*
This code example produces the following results:

3.4 = Math.Round( 3.45, 1)
-3.4 = Math.Round(-3.45, 1)

3.4 = Math.Round( 3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round( 3.45, 1, MidpointRounding.AwayFromZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)

*/
14.01.2011
Golo Roden 2,5k 2 9
1
Das kannst du mit der Methode Round() aus der statischen Klasse Math:

Math.Round(DeineZahl, Nachkommastelle)


Beispiel:
Math.Round(3.543, 2) //Resultat 3.54
14.01.2011
Mario Priebe 5,8k 2 9

Stelle deine Vb-Frage jetzt!