2010-10-31 5 views
3

Considérez le code C#:Arrondir un nombre en utilisant des règles non standard

Decimal number = new decimal(8.0549); 
Decimal rounded = Math.Round(number, 2); 
Console.WriteLine("rounded value: {0}", rounded); 

produira la sortie: 8,05

de Algoritm de Math.Round ne vérifie que le chiffre suivant au-delà du nombre de décimales pris comme paramètre.
J'ai besoin d'un algorithme qui vérifie toute la chaîne décimale. Dans ce cas, 9 Devrais-tours 4 à 5 qui à son tour tours de 5 à 6, produisant le résultat final 8,06

Plus exemples:
8,0545 -> 8,06
8,0544 -> 8,05

Il y a un certain construit -In méthode qui peut m'aider?
Merci.

+4

I cul Etes-vous conscient que l'arrondi que vous proposez n'est pas mathématiquement correct? C'est à dire. 8.0545 est plus proche de 8.05 que de 8.06, arrondir à 8.06 n'est donc pas correct. –

+2

Juste curieux (puisque ce que vous cherchez n'est pas arrondi) .... pourquoi? ;) –

+1

Oui, je suis conscient que ce n'est pas mathématiquement correct. C'est parce que je l'ai appelé "non standard". Mais ça continue à être arrondi, non? :) Je ne suis pas d'accord avec cette règle aussi. Mais est-ce que les ordres supérieurs .. –

Répondre

1

Non; vous aurez besoin de l'écrire vous-même.

1

j'attendre que s'il y avait un construit en méthode pour le faire, il aurait déjà été rapporté comme un bogue;)

Cela dit - vous pouvez créer une méthode qui prend votre décimal, ainsi que max et min nombre de places pour arrondir à l'envers à partir, et dans une boucle écraser le bas aux endroits souhaités - à savoir quelque chose comme ceci:

private static double NotQuiteRounding(double numToRound, int maxPlaces, int minPlaces) 
{ 
    int i = maxPlaces; 
    do 
    { 
     numToRound = Math.Round(numToRound,i); 
     i = i - 1; 
    } 
    while (i >= minPlaces); 

    return numToRound; 
} 

et l'appeler comme ceci:

Console.WriteLine(NotQuiteRounding(8.0545,10,2)); 
    Console.WriteLine(NotQuiteRounding(8.0544,10,2)); 
+2

Ne faites pas cela, sinon à la fin de la routine, les choses se déchaîneront et les enfants seront mangés. –

+2

.. en effet ... mais pour arriver à cela sur Halloween est très approprié si :-) –

+1

Ne devrait pas «i» diminuer au lieu d'augmenter? –

Questions connexes