vous en avez vraiment besoin après 10 ans bizarres? lol
L_Church
1
pourquoi après 10 ans y a-t-il une prime? il y a déjà beaucoup de réponses. y a-t-il quelque chose qui me manque ici?
Flaque d'
3
Ce gars n'a posé qu'une seule question et a quitté le site depuis. Je suppose que c'est tout ce qu'il a toujours voulu savoir ..: D
Nikos
Réponses:
484
Math.Floorarrondit vers le bas, Math.Ceilingarrondit vers le haut et Math.Truncatearrondit vers zéro. Ainsi, Math.Truncatec'est comme Math.Floorpour les nombres positifs et comme Math.Ceilingpour les nombres négatifs. Voici la référence .
Pour être complet, Math.Roundarrondit à l'entier le plus proche. Si le nombre est exactement à mi-chemin entre deux nombres entiers, alors il arrondit vers le pair. Référence.
@Chris, je vous suggère de corriger votre description de Round, il y a deux façons d'arrondir (AwayFromZero et ToEven) et il ne s'arrondit pas à l' entier le plus proche car il peut également effectuer un arrondi fractionnaire.
paxdiablo
1
Donc, juste un petit ajout à la question d'origine - quelle est la différence entre Math.Truncate et simplement un décimal ou un double en entier? ne serait-il pas également arrondi vers zéro?
Noam Gal
8
Quand (int)myDoublediffère- (int)Math.Truncate(myDouble)t-il?
mpen
2
À quoi (int) est-il égal en classe de mathématiques?
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 à égale distance entre deux possibilités, telles que l'arrondi de sorte que le dernier chiffre soit pair (" Round(2.5,MidpointRounding.ToEven)" devenant 2) ou 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-10123+--|------+---------+----|----+--|------+----|----+-------|-+
a b c d e
a=-2.7 b=-0.5 c=0.3 d=1.5 e=2.8===========================Floor-3-1012Ceiling-20123Truncate-20012Round(ToEven)-30023Round(AwayFromZero)-3-1023
Notez que Roundc'est 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
Pax, je pense que vous avez une erreur avec: Round (AwayFromZero) -3 -2 1 2 3 Math.Round (-1.2, MidpointRounding.AwayFromZero) == -1 Math.Round (0.3, MidpointRounding.AwayFromZero) == 0,0 etc.
dtroy
1
Merci, @dtroy, je n'ai jamais eu besoin d'utiliser ce mode et, même si je l'ai documenté correctement si le texte, j'ai totalement mal compris les exemples. Espérons que ce soit corrigé maintenant.
paxdiablo
Désolé de commenter une question aussi ancienne, mais je dois vous demander: comment arrondir "ToEven" à deux décimales? Sûrement étrange et ne s'applique même qu'aux nombres entiers?
Richiban
4
@Richiban, pensez evencomme une propriété du dernier chiffre du nombre arrondi, et non comme signifiant que le nombre entier doit être un multiple de deux. Soit dit en passant, désolé qu'il ait fallu si longtemps pour vous répondre, j'espère que vous n'étiez pas simplement assis à attendre ma réponse :-)
paxdiablo
62
Math.Floor() arrondit vers l'infini négatif
Math.Truncate arrondit vers le haut ou vers le bas vers zéro.
Math.floorsliiiide à gauche ... Math.ceilsliiiide à droite ... Math.truncatecriiiiss crooooss (plancher / plafond toujours vers 0) Math.roundcha cha, très lisse ... (aller du côté le plus proche)
Allons au travail! (⌐ □ _ □)
À gauche ... Math.floor
Reprenez maintenant, vous tous ... --
Deux sauts cette fois ...-=2
Réponses:
Math.Floor
arrondit vers le bas,Math.Ceiling
arrondit vers le haut etMath.Truncate
arrondit vers zéro. Ainsi,Math.Truncate
c'est commeMath.Floor
pour les nombres positifs et commeMath.Ceiling
pour les nombres négatifs. Voici la référence .Pour être complet,
Math.Round
arrondit à l'entier le plus proche. Si le nombre est exactement à mi-chemin entre deux nombres entiers, alors il arrondit vers le pair. Référence.Voir aussi: la réponse de Pax Diablo . Hautement recommandé!
la source
(int)myDouble
diffère-(int)Math.Truncate(myDouble)
t-il?Suivez ces liens pour les descriptions MSDN de:
Math.Floor
, qui arrondit vers 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 à égale distance entre deux possibilités, telles que l'arrondi de sorte que le dernier chiffre soit pair ("Round(2.5,MidpointRounding.ToEven)
" devenant 2) ou qu'il soit plus éloigné de zéro ("Round(2.5,MidpointRounding.AwayFromZero)
" devenant 3).Le diagramme et le tableau suivants peuvent vous aider:
Notez que
Round
c'est 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:Avec les autres fonctions, vous devez utiliser la supercherie multiplier / diviser pour obtenir le même effet:
la source
even
comme une propriété du dernier chiffre du nombre arrondi, et non comme signifiant que le nombre entier doit être un multiple de deux. Soit dit en passant, désolé qu'il ait fallu si longtemps pour vous répondre, j'espère que vous n'étiez pas simplement assis à attendre ma réponse :-)Math.Floor()
arrondit vers l'infini négatifMath.Truncate
arrondit vers le haut ou vers le bas vers zéro.Par exemple:
tandis que
la source
Quelques exemples:
la source
Math.floor
sliiiide à gauche ...Math.ceil
sliiiide à droite ...Math.truncate
criiiiss crooooss (plancher / plafond toujours vers 0)Math.round
cha cha, très lisse ... (aller du côté le plus proche)Allons au travail! (⌐ □ _ □)
À gauche ...
Math.floor
Reprenez maintenant, vous tous ...
--
Deux sauts cette fois ...
-=2
Tout le monde frappe des mains ✋✋
Jusqu'où pouvez-vous descendre? Pouvez-vous descendre bas? Jusqu'au
floor
?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
Ils sont fonctionnellement équivalents avec des nombres positifs. La différence réside dans la façon dont ils traitent les nombres négatifs.
Par exemple:
Liens MSDN: - Méthode Math.Floor - Math.Floor Méthode Math.Truncate
PS Méfiez-vous des mathématiques, mais ce n'est peut-être pas ce que vous attendez.
Pour obtenir le résultat d'arrondi "standard", utilisez:
la source
Essayez ceci, Exemples:
Math.Floor () vs Math.Truncate ()
Aussi Math.Round ()
math.floor()
Renvoie le plus grand entier inférieur ou égal au nombre spécifié. MSDN system.math.floor
math.truncate()
Calcule la partie intégrale d'un nombre. MSDN system.math.truncate
la source
Math.Floor()
arrondit "vers l'infini négatif" conformément à la section 4 de la norme IEEE 754 .Math.Truncate()
arrondit "à l'entier le plus proche vers zéro".la source
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
Floor()
etTruncate()
, nonFloor()
etRound()
.Math.floor()
sera toujours arrondi vers le bas, c'est-à-dire qu'il renvoie moins d'entier. Whileround()
renverra l'entier NEARESTmath.floor ()
Renvoie le plus grand entier inférieur ou égal au nombre spécifié.
math.truncate ()
Calcule la partie intégrale d'un nombre.
la source
Tronquer laisse tomber la décimale ****
la source