2010-11-19 30 views

Répondre

7

Vous pouvez effectuer les opérations suivantes:

var rounded = Math.Floor(13.608000 * 100)/100; 

Notez que Math.Floor() arrondit à l'entier le plus proche, d'où la nécessité de multiplier, arrondir vers le bas, puis diviser.

-1

fonction Math.Round devrait le faire, http://msdn.microsoft.com/en-us/library/zy06z30k.aspx

+0

Le comportement de cette méthode suit la norme IEEE 754, section 4. Ce type d'arrondi est parfois appelé arrondi au plus proche Question posée à propos de l'arrondi ** bas **. –

+0

Pas tout à fait, car il ne se termine pas toujours. – BoltClock

+0

C'est vrai. J'ai mal lu le 8 dans la question pour un zéro. – Jason

0

Pour arrondir vers le bas, utilisez Math.Floor. Pour arrondir à un facteur différent de 1.0, multipliez avant d'appeler Floor et de diviser ensuite.

double x = 0.01 * Math.Floor(100 * y); 
-1

Solution:

decimal x = 13.6080001; 
int places = 2; 
int result = (int)(Math.Round(x - (0.5 * Math.Pow(10, 0 - places), places))); 
7

est ici un port direct de la fonction Excel pour nombre variable de décimales

public double RoundDown(double number, int decimalPlaces) 
{ 
    return Math.Floor(number * Math.Pow(10, decimalPlaces))/Math.Pow(10, decimalPlaces); 
} 

par exemple ArrondiInférieur (13.608000,2) = 13,60, ArrondiInférieur (12 345, -3) = 12000,

+0

Cela fonctionne très bien !!! –

2

Voici la solution:

double RoundDown(double value, int digits) 
    { 
     if (value >= 0) 
      return Math.Floor(value * Math.Pow(10, digits))/Math.Pow(10, digits); 

     return Math.Ceiling(value * Math.Pow(10, digits))/Math.Pow(10, digits); 
    } 

La réponse de RichardW1001 est presque droite, il n'a tout simplement pas compte de l'arrondissement de valeurs négatives.

+0

Cela ne fonctionne pas de la même manière que RoundDown dans Excel, qui semble arrondir les valeurs à zéro, par ex. -2,55 devient -2, cette fonction tournera de -2,55 à -3. – Pones