2009-09-19 8 views

Répondre

25

Que diriez-vous:

Math.Ceiling(myValue * 20)/20 
+0

excellent ... Merci –

+0

predator4: Cela semble être ce que l'OP veut, avec le '6,66 -> 6.7' exemple. – caf

+0

@ predator4: C'est correct dans mon scénario (Calcul de l'impôt) –

1

dupliquées here et here pour le rubis et le python. Ça ne devrait pas être trop différent.

2

Math..::.Round Method (Decimal, Int32, MidpointRounding)

rounds une double précision en virgule flottante pour le nombre spécifié de chiffres après la virgule. Un paramètre spécifie comment arrondir la valeur si elle est à mi-chemin entre deux autres nombres.

Math.Round(1.489,2,MidpointRounding.AwayFromZero) 
+0

MidpointRounding.AwayFromZero ne permet pas de Round UP -voir http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx –

7

Utilisez ceci:

Math.Round(mydecimal/0.05m, 0) * 0.05m; 

La même logique peut être utilisé dans T-SQL:

ROUND(@mydecimal/0.05, 0) * 0.05 

Je préfère cette approche à la selected answer simplement parce que vous pouvez voir directement la précision utilisé.

+2

Math.Round ne permet pas de Round Up –

4

Quelque chose comme cela devrait fonctionner pour toute étape, non seulement 0,05:

private decimal RoundUp (decimal value, decimal step) 
{ 
    var multiplicand = Math.Ceiling (value/step); 
    return step * multiplicand; 
} 
Questions connexes