por exemplo Math.Floor (5.4) = 5 Math.Truncate (5.4) = 5
subramani
3
você realmente precisa disso depois de 10 anos? lol
L_Church
1
por que depois de 10 anos há uma recompensa? já existem muitas respostas. há algo que estou perdendo aqui?
Puddle
3
Esse cara fez apenas 1 pergunta e saiu do site desde então. Eu acho que é tudo o que ele sempre quis saber ..: D
Nikos
Respostas:
484
Math.Floorarredonda para baixo, Math.Ceilingarredonda para cima e Math.Truncatearredonda para zero. Assim, Math.Truncateé como Math.Floorpara números positivos e como Math.Ceilingpara números negativos. Aqui está a referência .
Para completar, Math.Roundarredonda para o número inteiro mais próximo. Se o número estiver exatamente no meio do caminho entre dois números inteiros, ele arredonda para o número par. Referência.
@ Chris, eu sugiro que você corrija sua descrição de Round, há duas maneiras de arredondar (AwayFromZero e ToEven) e não arredondam para o número inteiro mais próximo, pois também podem fazer arredondamentos fracionários.
23420
1
Portanto, apenas um pequeno complemento à pergunta original - qual é a diferença entre Math.Truncate e apenas converter um decimal ou duplo para int? não seria apenas arredondar para zero?
Noam Gal
8
Quando é (int)myDoublediferente (int)Math.Truncate(myDouble)?
MPEN
2
O que é (int) igual na aula de matemática?
Lei Yang
386
Siga estes links para as descrições do MSDN de:
Math.Floor, que arredonda para o infinito negativo.
Math.Ceiling, que arredonda para o infinito positivo.
Math.Truncate, que arredonda para cima ou para baixo em direção a zero.
Math.Round, que arredonda para o número inteiro mais próximo ou o número especificado de casas decimais. Você pode especificar o comportamento se ele for exatamente equidistante entre duas possibilidades, como o arredondamento para que o dígito final seja par (" Round(2.5,MidpointRounding.ToEven)" se torne 2) ou para que fique mais longe de zero (" Round(2.5,MidpointRounding.AwayFromZero)" se torne 3).
O diagrama e tabela a seguir podem ajudar:
-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
Observe que Roundé muito mais poderoso do que parece, simplesmente porque pode arredondar para um número específico de casas decimais. Todos os outros arredondam para zero decimais sempre. Por exemplo:
n =3.145;
a =System.Math.Round(n,2,MidpointRounding.ToEven);// 3.14
b =System.Math.Round(n,2,MidpointRounding.AwayFromZero);// 3.15
Com as outras funções, você deve usar truques de multiplicar / dividir para obter o mesmo efeito:
c =System.Math.Truncate(n *100)/100;// 3.14
d =System.Math.Ceiling(n *100)/100;// 3.15
Obrigado, @dtroy, nunca tive a necessidade de usar esse modo e, enquanto o documentava corretamente se o texto, entendi totalmente os exemplos. Espero que isso esteja resolvido agora.
5609
Desculpe comentar uma pergunta tão antiga, mas eu tenho que perguntar: Como você pode arredondar "ToEven" para duas casas decimais? Certamente estranho e até aplicável apenas a números inteiros?
Richiban
4
@ Richiban, pense evencomo uma propriedade do dígito final no número arredondado, não como significando que o número inteiro deve ser um múltiplo de dois. By the way, desculpe, demorou tanto tempo para voltar para você, espero que você não esteja apenas sentado esperando a minha resposta :-) #
384
62
Math.Floor() arredonda para o infinito negativo
Math.Truncate arredonda para cima ou para baixo em direção a zero.
Math.floorsliiiide para a esquerda ... Math.ceilsliiiide para a direita ... Math.truncatecriiiiss crooooss (piso / teto sempre em direção a 0) Math.roundcha cha, bem suave ... (vá para o lado mais próximo)
Vamos trabalhar! (⌐ □ _ □)
Para a esquerda ... Math.floor
Volte agora ... --
Dois saltos desta vez ...-=2
Todo mundo bate palmas ✋✋
Quão baixo você pode ir? Você pode descer baixo? Todo o caminho para o floor?
if(this=="wrong")return"i don't wanna be right";
Math.truncate(x)também é o mesmo que int(x).
removendo uma fração positiva ou negativa, você está sempre indo para o zero.
Respostas:
Math.Floor
arredonda para baixo,Math.Ceiling
arredonda para cima eMath.Truncate
arredonda para zero. Assim,Math.Truncate
é comoMath.Floor
para números positivos e comoMath.Ceiling
para números negativos. Aqui está a referência .Para completar,
Math.Round
arredonda para o número inteiro mais próximo. Se o número estiver exatamente no meio do caminho entre dois números inteiros, ele arredonda para o número par. Referência.Veja também: Resposta de Pax Diablo . Altamente recomendado!
fonte
(int)myDouble
diferente(int)Math.Truncate(myDouble)
?Siga estes links para as descrições do MSDN de:
Math.Floor
, que arredonda para o infinito negativo.Math.Ceiling
, que arredonda para o infinito positivo.Math.Truncate
, que arredonda para cima ou para baixo em direção a zero.Math.Round
, que arredonda para o número inteiro mais próximo ou o número especificado de casas decimais. Você pode especificar o comportamento se ele for exatamente equidistante entre duas possibilidades, como o arredondamento para que o dígito final seja par ("Round(2.5,MidpointRounding.ToEven)
" se torne 2) ou para que fique mais longe de zero ("Round(2.5,MidpointRounding.AwayFromZero)
" se torne 3).O diagrama e tabela a seguir podem ajudar:
Observe que
Round
é muito mais poderoso do que parece, simplesmente porque pode arredondar para um número específico de casas decimais. Todos os outros arredondam para zero decimais sempre. Por exemplo:Com as outras funções, você deve usar truques de multiplicar / dividir para obter o mesmo efeito:
fonte
even
como uma propriedade do dígito final no número arredondado, não como significando que o número inteiro deve ser um múltiplo de dois. By the way, desculpe, demorou tanto tempo para voltar para você, espero que você não esteja apenas sentado esperando a minha resposta :-) #Math.Floor()
arredonda para o infinito negativoMath.Truncate
arredonda para cima ou para baixo em direção a zero.Por exemplo:
enquanto
fonte
Alguns exemplos:
fonte
Math.floor
sliiiide para a esquerda ...Math.ceil
sliiiide para a direita ...Math.truncate
criiiiss crooooss (piso / teto sempre em direção a 0)Math.round
cha cha, bem suave ... (vá para o lado mais próximo)Vamos trabalhar! (⌐ □ _ □)
Para a esquerda ...
Math.floor
Volte agora ...
--
Dois saltos desta vez ...
-=2
Todo mundo bate palmas ✋✋
Quão baixo você pode ir? Você pode descer baixo? Todo o caminho para o
floor
?Math.truncate(x)
também é o mesmo queint(x)
.removendo uma fração positiva ou negativa, você está sempre indo para o zero.
fonte
Eles são funcionalmente equivalentes a números positivos. A diferença está em como eles lidam com números negativos.
Por exemplo:
Links do MSDN: - Método Math.Floor - Método Math.Truncate
PS Cuidado com Math.Round pode não ser o que você espera.
Para obter o resultado do arredondamento "padrão", use:
fonte
Tente isso, Exemplos:
Math.Floor () vs Math.Truncate ()
Também Math.Round ()
math.floor()
Retorna o maior número inteiro menor ou igual ao número especificado. MSDN system.math.floor
math.truncate()
Calcula a parte integrante de um número. MSDN system.math.truncate
fonte
Math.Floor()
arredonda "em direção ao infinito negativo", em conformidade com a seção 4 da norma IEEE 754 .Math.Truncate()
arredonda "para o número inteiro mais próximo em direção a zero".fonte
Math.Floor()
: Retorna o maior número inteiro menor ou igual ao número de ponto flutuante de precisão dupla especificado.Math.Round()
: Arredonda um valor para o número inteiro mais próximo ou para o número especificado de dígitos fracionários.fonte
Floor()
eTruncate()
, nãoFloor()
eRound()
.Math.floor()
sempre arredondará para baixo, ou seja, retornará LESSER inteiro. Whileround()
retornará o número inteiro MAIS PRÓXIMOmath.floor ()
Retorna o maior número inteiro menor ou igual ao número especificado.
math.truncate ()
Calcula a parte integrante de um número.
fonte
Truncar descarta o decimal ****
fonte