.net - Différence entre Math.Floor () et Math.Truncate ()

Translate

Quelle est la différence entreMath.Floor()etMath.Truncate()dans .NET?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Math.Floorarrondit,Math.Ceilingarrondit, etMath.Truncatearrondit vers zéro. Donc,Math.Truncateest commeMath.Floorpour les nombres positifs, et commeMath.Ceilingpour les nombres négatifs. Ici se trouve leréférence.

Par souci d'exhaustivité,Math.Roundarrondit à l'entier le plus proche. Si le nombre est exactement à mi-chemin entre deux entiers, alors il arrondit vers le pair.Référence.

Voir également:La réponse de Pax Diablo. Hautement recommandé!

La source
Translate

Suivez ces liens pour les descriptions MSDN de:

  • Math.Floor, qui arrondit à l'infini négatif.
  • Math.Ceiling, qui arrondit vers l'infini positif.
  • Math.Truncate, qui arrondit vers le haut ou vers le bas vers zéro.
  • Math.Round, qui arrondit à l'entier le plus proche ou au nombre spécifié de décimales. Vous pouvez spécifier le comportement s'il est exactement équidistant entre deux possibilités, comme l'arrondi afin que le dernier chiffre soit pair ("Round(2.5,MidpointRounding.ToEven)"devenant 2) ou pour qu'il soit plus éloigné de zéro ("Round(2.5,MidpointRounding.AwayFromZero)"devenant 3).

Le diagramme et le tableau suivants peuvent vous aider:

-3        -2        -1         0         1         2         3
 +--|------+---------+----|----+--|------+----|----+-------|-+
    a                     b       c           d            e

                       a=-2.7  b=-0.5  c=0.3  d=1.5  e=2.8
                       ======  ======  =====  =====  =====
Floor                    -3      -1      0      1      2
Ceiling                  -2       0      1      2      3
Truncate                 -2       0      0      1      2
Round (ToEven)           -3       0      0      2      3
Round (AwayFromZero)     -3      -1      0      2      3

Notez queRoundest beaucoup plus puissant qu'il n'y paraît, simplement parce qu'il peut arrondir à un nombre spécifique de décimales. Tous les autres arrondissent toujours à zéro décimale. Par exemple:

n = 3.145;
a = System.Math.Round (n, 2, MidpointRounding.ToEven);       // 3.14
b = System.Math.Round (n, 2, MidpointRounding.AwayFromZero); // 3.15

Avec les autres fonctions, vous devez utiliser la supercherie multiplier / diviser pour obtenir le même effet:

c = System.Math.Truncate (n * 100) / 100;                    // 3.14
d = System.Math.Ceiling (n * 100) / 100;                     // 3.15
La source
Translate

Math.Floor()arrondit vers l'infini négatif

Math.Truncatearrondit vers le haut ou vers le bas vers zéro.

Par exemple:

Math.Floor(-3.4)     = -4
Math.Truncate(-3.4)  = -3

tandis que

Math.Floor(3.4)     = 3
Math.Truncate(3.4)  = 3
La source
Translate

Quelques exemples:

Round(1.5) = 2
Round(2.5) = 2
Round(1.5, MidpointRounding.AwayFromZero) = 2
Round(2.5, MidpointRounding.AwayFromZero) = 3
Round(1.55, 1) = 1.6
Round(1.65, 1) = 1.6
Round(1.55, 1, MidpointRounding.AwayFromZero) = 1.6
Round(1.65, 1, MidpointRounding.AwayFromZero) = 1.7

Truncate(2.10) = 2
Truncate(2.00) = 2
Truncate(1.90) = 1
Truncate(1.80) = 1
La source
Translate

Ils sont fonctionnellement équivalents aux nombres positifs. La différence réside dans la façon dont ils traitent les nombres négatifs.

Par exemple:

Math.Floor(2.5) = 2
Math.Truncate(2.5) = 2

Math.Floor(-2.5) = -3
Math.Truncate(-2.5) = -2

Liens MSDN: -Math.Floor, méthode-Math.Truncate, méthode

PS Méfiez-vous des mathématiques.

Pour obtenir le résultat d'arrondi «standard», utilisez:

float myFloat = 4.5;
Console.WriteLine( Math.Round(myFloat) ); // writes 4
Console.WriteLine( Math.Round(myFloat, 0, MidpointRounding.AwayFromZero) ) //writes 5
Console.WriteLine( myFloat.ToString("F0") ); // writes 5
La source
Translate

Math.Floor()arrondit "vers l'infini négatif" conformément àNorme IEEE 754Section 4.

Math.Truncate()arrondit «à l'entier le plus proche vers zéro».

La source
Translate

math.floor()

Renvoie le plus grand entier inférieur ou égal au nombre spécifié.

MSDNsystem.math.floor

math.truncate()

Calcule la partie intégrale d'un nombre.

MSDNsystem.math.truncate

Math.Floor(2.56) = 2
Math.Floor(3.22) = 3
Math.Floor(-2.56) = -3
Math.Floor(-3.26) = -4

Math.Truncate(2.56) = 2
Math.Truncate(2.00) = 2
Math.Truncate(1.20) = 1
Math.Truncate(-3.26) = -3
Math.Truncate(-3.96) = -3

en plusMath.Round ()

   Math.Round(1.6) = 2
   Math.Round(-8.56) = -9
   Math.Round(8.16) = 8
   Math.Round(8.50) = 8
   Math.Round(8.51) = 9
La source
Sean Lee
Translate

Math.floorsliiiide vers la gauche ...
Math.ceilsliiiide vers la droite ...
Math.truncatecriiiiss crooooss (sol / plafond toujours vers 0)
Math.roundcha cha, vraiment lisse ... (aller du côté le plus proche)

Allons au travail! (⌐ □ _ □)

À gauche...Math.floor
Reprenez-le maintenant, vous tous ...--
Deux sauts cette fois ...-=2

Tout le monde tape dans vos mains ✋✋

Jusqu'où pouvez-vous aller? Pouvez-vous descendre bas? Tout le chemin vers lefloor?

if (this == "wrong")
    return "i don't wanna be right";

Math.truncate(x)est également le même queint(x).
en supprimant une fraction positive ou négative, vous vous dirigez toujours vers 0.

La source
Translate

Math.Floor(): Renvoie le plus grand entier inférieur ou égal au nombre à virgule flottante double précision spécifié.

Math.Round(): Arrondit une valeur à l'entier le plus proche ou au nombre spécifié de chiffres fractionnaires.

La source
Translate

Mat.floor()sera toujours arrondi, c'est-à-dire qu'il renvoie un entier MOINS. Tandis queround()renverra l'entier LE PLUS PROCHE

La source