Différence entre les Mathématiques.Floor() et Math.Tronquer()

Quelle est la différence entre Math.Floor() et Math.Truncate() dans .NET?

375
demandé sur GedAWizardofEarthSea 2008-08-01 04:59:11

10 réponses

Math.Floor tours", 151910920" tours de, et les Math.Truncate tours vers zéro. Ainsi, Math.Truncate est comme Math.Floor pour les nombres positifs, et comme Math.Ceiling pour les nombres négatifs. Voici le référence .

pour être complet, Math.Round arrondit à l'entier le plus proche. Si le nombre est exactement à mi-chemin entre deux entiers, alors il arrondit vers le même. référence.

Voir aussi: Pax de Diablo réponse . Fortement recommandé!

439
répondu Chris Jester-Young 2017-05-23 12:03:01

suivez ces liens pour les descriptions MSDN de:

  • Math.Floor , qui se dirige vers l'infini négatif.
  • Math.Ceiling , qui s'approche de l'infini positif.
  • Math.Truncate , qui tourne vers le haut ou vers le bas vers zéro.
  • Math.Round , qui arrondit au nombre 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 pour que le chiffre final 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 être utiles:

-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 que Round est beaucoup plus puissant qu'il n'y paraît, tout simplement parce qu'il peut arrondir à un nombre de décimales. Tous les autres autour de zéro décimales toujours. 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
357
répondu paxdiablo 2012-12-27 12:13:33

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

Math.Truncate s'arrondit vers le haut ou vers le bas vers zéro.

par exemple:

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

alors que

Math.Floor(3.4)     = 3
Math.Truncate(3.4)  = 3
50
répondu Azhar 2017-11-11 03:45:52

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
39
répondu Marek Grzenkowicz 2009-02-24 22:26:38

Ils sont fonctionnellement équivalents avec des nombres positifs. La différence réside dans la façon dont ils gèrent 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: - "151970920 des Mathématiques".Méthode Du Plancher - "151990920 des Mathématiques".Méthode Tronquée

P. S. Méfiez-vous des Maths.Autour de lui il ne peut pas être ce que vous attendez.

pour obtenir le résultat d'arrondissement" standard "utiliser:

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
21
répondu Sandesh 2016-04-18 19:15:59

Math.Floor() visites "toward negative infinity "en conformité avec IEEE Standard 754 section 4.

Math.Truncate() des tours " à l'entier le plus proche vers zéro."

19
répondu 2012-06-07 18:15:14

math.floor()

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

MSDN system.mathématique.plancher

math.truncate()

calcule la partie intégrante d'un nombre.

MSDN system.mathématique.tronqué

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

In outre "1519250920 des Mathématiques".Rond ()

   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
15
répondu safin chacko 2017-04-04 07:41:15

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

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

12
répondu Pinky 2016-04-18 19:11:26

Math.floor sliiiide à gauche...

Math.ceil sliiiide à droite...

Math.truncate criiiiss crooooss (plancher/plafond toujours vers 0)

Math.round cha cha, très fluide... (aller au côté le plus proche)

au travail!

à gauche... Math.floor

Le reprendre maintenant, y'all... --

Deux sauts cette fois... -=2

tout le monde tape des mains

jusqu'où peut-on aller? Pouvez-vous descendre plus bas? Jusqu'au floor ?

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

Math.truncate(x) est aussi le même que int(x) .

en enlevant une fraction positive ou négative, vous vous dirigez toujours vers 0.

10
répondu Puddle 2018-02-22 16:28:33

Mat.floor() sera toujours arrondi à l'inférieur ie., il renvoie un nombre entier inférieur. Tandis que round() retournera l'entier le plus proche

1
répondu vidy 2018-09-19 03:49:19