Je veux le faire en utilisant la Math.Round
fonction
380
Je veux le faire en utilisant la Math.Round
fonction
Voici quelques exemples:
decimal a = 1.994444M;
Math.Round(a, 2); //returns 1.99
decimal b = 1.995555M;
Math.Round(b, 2); //returns 2.00
Vous pouvez également regarder les banquiers arrondis / arrondis à égal avec la surcharge suivante:
Math.Round(a, 2, MidpointRounding.ToEven);
Il y a plus d'informations ici .
0.005
le avant l'arrondi. De même pour arrondir vers le bas , soustraire0.005
avant de passer à laMath.Round
fonction.MidPointRounding.ToEven
(aka "Bankers Rounding") est parce que nous avons tous appris à arrondir à l'école où .5 arrondis provoque trop d'arrondis. C'est un problème lorsqu'il s'agit d'argent, de calculs fiscaux, etc.Essaye ça:
la source
Personnellement, je n'ai jamais rien arrondi. Gardez-le aussi résolu que possible, car l'arrondi est un peu un hareng rouge dans CS de toute façon. Mais vous voulez formater les données pour vos utilisateurs, et à cette fin, je trouve que
string.Format("{0:0.00}", number)
c'est une bonne approche.la source
Si vous souhaitez une chaîne
Ou une décimale
Mais rappelles-toi! L'arrondi n'est pas distributif, c'est-à-dire.
round(x*y) != round(x) * round(y)
. Donc, ne faites pas d'arrondi jusqu'à la fin d'un calcul, sinon vous perdrez la précision.la source
Wikipedia a une belle page sur l'arrondi en général.
Tous les langages .NET (gérés) peuvent utiliser n'importe quel mécanisme d'arrondi du langage commun (CLR). Par exemple, la méthode Math.Round () (comme mentionné ci-dessus) permet au développeur de spécifier le type d'arrondi (Arrondi à égal ou Absent de zéro). La méthode Convert.ToInt32 () et ses variantes utilisent l' arrondi en pair . Les méthodes Ceiling () et Floor () sont liées.
Vous pouvez également arrondir avec une mise en forme numérique personnalisée .
Notez que Decimal.Round () utilise une méthode différente de Math.Round ();
Voici une position utile sur l'algorithme d'arrondi du banquier. Voir l'un des articles humoristiques de Raymond ici sur l'arrondissement ...
la source
// convertir jusqu'à deux décimales
=========
peut également combiner "0" avec "#".
la source
Je sais que c'est une vieille question, mais veuillez noter les différences suivantes entre le tour Math et le tour de format String :
la source
C'est pour arrondir à 2 décimales en C #:
Dans VB.NET:
la source
Si vous voulez arrondir un nombre, vous pouvez obtenir des résultats différents selon: la façon dont vous utilisez la fonction Math.Round () (si pour un arrondi ou un arrondi), vous travaillez avec des nombres doubles et / ou flottants et vous appliquez l'arrondi au milieu. Surtout, lors de l'utilisation avec des opérations à l'intérieur de celle-ci ou la variable à arrondir provient d'une opération. Disons que vous voulez multiplier ces deux nombres: 0,75 * 0,95 = 0,7125 . Droite? Pas en C #
Voyons ce qui se passe si vous voulez arrondir à la 3e décimale:
Comme vous le voyez, le premier Round () est correct si vous voulez arrondir le milieu. Mais le deuxième Round () c'est faux si vous voulez arrondir.
Cela s'applique aux nombres négatifs:
Donc, à mon humble avis, vous devez créer votre propre fonction d'habillage pour Math.Round () qui correspond à vos besoins. J'ai créé une fonction dans laquelle, le paramètre 'roundUp = true' signifie arrondir au nombre supérieur suivant. Soit: 0,7125 rounds à 0,713 et -0,7125 rounds à -0,712 (car -0,712> -0,713). C'est la fonction que j'ai créée et qui fonctionne pour n'importe quel nombre de décimales:
La variable «correcteur» sert à corriger l'inexactitude du fonctionnement avec des nombres flottants ou doubles.
la source
Une chose que vous voudrez peut-être vérifier est le mécanisme d'arrondi des mathématiques.
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
En dehors de cela, je recommande l'approche Math.Round (inputNumer, numberOfPlaces) par rapport à celle * 100/100 car elle est plus propre.
la source
Vous devriez être en mesure de spécifier le nombre de chiffres que vous souhaitez arrondir à l'aide de Math.Round (YourNumber, 2)
Vous pouvez en lire plus ici .
la source
Math.Floor (123456.646 * 100) / 100 retournerait 123456.64
la source
chaîne a = "10,65678";
décimal d = Math.Round (Convert.ToDouble (a.ToString ()), 2)
la source
Dans une situation étrange où j'avais une variable décimale, lors de la sérialisation de 55,50, elle définit toujours la valeur par défaut mathématiquement comme 55,5. Mais alors, notre système client attend sérieusement 55,50 pour une raison quelconque et ils s'attendaient certainement à la décimale. C'est quand j'ai écrit l'aide ci-dessous, qui convertit toujours toute valeur décimale complétée en 2 chiffres avec des zéros au lieu d'envoyer une chaîne.
L'utilisation doit être
Production:
la source
la source