Arredondar para baixo

1,228 views
Skip to first unread message

Geraldo M G Barboza

unread,
Nov 17, 2009, 7:00:08 AM11/17/09
to dotn...@googlegroups.com
Como arredondo para baixo no c#? existe algum metodo da math que conhecem? ou algum outro
 
por ex: 
 
1.445    Resultado: 1.44
1.449    Resultado: 1.44
 

Console.WriteLine(Math.Round(1.445444, 2, MidpointRounding.AwayFromZero));

Console.WriteLine(Math.Round(1.445444, 2, MidpointRounding.ToEven));
 
tentei das como as maneiras acima mas nao da.... e o metodo

System.

Math.Ceiling 

Só arredonta pra inteiro pelo que vi...

 

Abraços

--
Geraldo Magela G Barboza
(11) 7999-0147
geraldo...@gmail.com

Bruno Gross

unread,
Nov 17, 2009, 7:02:55 AM11/17/09
to dotn...@googlegroups.com
Math.Floor faz isso não? 

2009/11/17 Geraldo M G Barboza <geraldo...@gmail.com>



--
Visite: www.UpaLele.com

att.
Bruno Gross
Analista de Sistemas
Celular: (21) 78545483
Rádio ID: 83*39379

Esta mensagem, incluindo seus anexos, pode conter informações confidenciais e/ou privilegiadas. Se você não for a pessoa autorizada a receber esta mensagem, não pode usar, copiar ou divulgar as informações nela contidas ou tomar qualquer ação baseada nessas informações. Caso esta mensagem tenha sido recebida por engano, por favor avise imediatamente o remetente, respondendo o e-mail e em seguida elimine-a do seu sistema. Agradeço sua cooperação.

Geraldo M G Barboza

unread,
Nov 17, 2009, 7:07:45 AM11/17/09
to dotn...@googlegroups.com
Math.Floor retorna o inteiro.. queria arredondar com as duas casas decimais para baixo.
 
fazendo assim:

String

.Format("{0:F2}",Math.Floor(12345.128666))

o resultado é 12345.00

o que preciso é: 12345.12


 
2009/11/17 Bruno Gross <bruno...@gmail.com>

Vinicius Quaiato

unread,
Nov 17, 2009, 7:36:33 AM11/17/09
to dotn...@googlegroups.com
Você está trabalhando com valores monetários?

Se for eu aconselho você a usar o tipo de dados decimal, faz toda diferença.

Agora sobre arredondar, eu teve esses problemas, e literalmente são problemas.

O que exatamente você está fazendo?


Att,
Vinicius Quaiato
www.viniciusquaiato.com
Google Talk: vinicius.quaiato

Alex GMAIL

unread,
Nov 17, 2009, 7:37:41 AM11/17/09
to dotn...@googlegroups.com
Multiplica por 100, pega a parte inteira e divide por 100.
Att,
Alex Barreto

Geraldo M G Barboza escreveu:
> Math.Floor retorna o inteiro.. queria arredondar com as duas casas
> decimais para baixo.
>
> fazendo assim:
>
> String
>
> .Format("{0:F2}",Math.Floor(12345.128666))
>
> o resultado é 12345.00
>
> o que preciso é: 12345.12
>
>
>
> 2009/11/17 Bruno Gross <bruno...@gmail.com <mailto:bruno...@gmail.com>>
>
> o Math.Floor faz isso não?
>
> 2009/11/17 Geraldo M G Barboza <geraldo...@gmail.com
> <mailto:geraldo...@gmail.com>>
>
> Como arredondo para baixo no c#? existe algum metodo da math que
> conhecem? ou algum outro
>
> por ex:
>
> 1.445 Resultado: 1.44
> 1.449 Resultado: 1.44
>
>
> Console.WriteLine(Math.Round(1.445444, 2,
> MidpointRounding.AwayFromZero));
>
> Console.WriteLine(Math.Round(1.445444, 2, MidpointRounding.ToEven));
>
> tentei das como as maneiras acima mas nao da.... e o metodo
>
> System.
>
> Math.Ceiling
>
> Só arredonta pra inteiro pelo que vi...
>
>
>
> Abraços
>
> --
> Geraldo Magela G Barboza
> (11) 7999-0147
> geraldo...@gmail.com <mailto:geraldo...@gmail.com>
>
>
>
>
>
>
> --
> Visite: www.UpaLele.com <http://www.upalele.com/>
>
> att.
> Bruno Gross
> Analista de Sistemas
> Celular: (21) 78545483
> Rádio ID: 83*39379
>
> Esta mensagem, incluindo seus anexos, pode conter informações
> confidenciais e/ou privilegiadas. Se você não for a pessoa
> autorizada a receber esta mensagem, não pode usar, copiar ou
> divulgar as informações nela contidas ou tomar qualquer ação baseada
> nessas informações. Caso esta mensagem tenha sido recebida por
> engano, por favor avise imediatamente o remetente, respondendo o
> e-mail e em seguida elimine-a do seu sistema. Agradeço sua cooperação.
>
> Geraldo Magela G Barboza
> (11) 7999-0147
> geraldo...@gmail.com <mailto:geraldo...@gmail.com>
>
> >

Geraldo M G Barboza

unread,
Nov 17, 2009, 7:41:18 AM11/17/09
to dotn...@googlegroups.com
Achei um metodo para fazer isso que segue abaixo para caso alguem precise.
Mas o que gostaria é que ja tivesse isso implementado na Math por ex..
 
abaixo metodo usado para arredondamento para baixo e informando a casa decimal:
 

public static double ObtemValorCampoDecimalTruncado(double valor, int precisao)

{

// Calcula o fator multiplicador

double fator = (double)Math.Pow(10d, precisao);

// Obtem o valor que queremos junto com a parte inteira,

// e desprezamos os valores decimais restantes

double valorTruncado = Math.Floor(valor * fator);

// Agora divide pelo fator multiplicado para obter de volta

// as casas decimais que foram parar na parte inteira (na multiplicao acima)

return Math.Floor((Math.Round(valorTruncado, precisao))) / fator;

}



 
2009/11/17 Alex GMAIL <alexdb...@gmail.com>
(11) 7999-0147
geraldo...@gmail.com

Julio Schneider

unread,
Nov 17, 2009, 7:43:52 AM11/17/09
to dotn...@googlegroups.com
Exemplificação do que o Alex falou (eu que ia dar essa resposta, cheguei atrasado hehehe =P)

double value = 123456.789876;
Console.WriteLine((Math.Floor(value * 100) / 100).ToString());

Mais fácil que seu método =)

Abrax!


2009/11/17 Alex GMAIL <alexdb...@gmail.com>

Alex GMAIL

unread,
Nov 17, 2009, 7:44:55 AM11/17/09
to dotn...@googlegroups.com
Pega o valor , multiplica por 100, pega a parte inteira do resultado e
divide por cem

Geraldo M G Barboza escreveu:
> Math.Floor retorna o inteiro.. queria arredondar com as duas casas
> decimais para baixo.
>
> fazendo assim:
>
> String
>
> .Format("{0:F2}",Math.Floor(12345.128666))
>
> o resultado é 12345.00
>
> o que preciso é: 12345.12
>
>
>
> 2009/11/17 Bruno Gross <bruno...@gmail.com <mailto:bruno...@gmail.com>>
>
> o Math.Floor faz isso não?
>
> 2009/11/17 Geraldo M G Barboza <geraldo...@gmail.com
> <mailto:geraldo...@gmail.com>>
>
> Como arredondo para baixo no c#? existe algum metodo da math que
> conhecem? ou algum outro
>
> por ex:
>
> 1.445 Resultado: 1.44
> 1.449 Resultado: 1.44
>
>
> Console.WriteLine(Math.Round(1.445444, 2,
> MidpointRounding.AwayFromZero));
>
> Console.WriteLine(Math.Round(1.445444, 2, MidpointRounding.ToEven));
>
> tentei das como as maneiras acima mas nao da.... e o metodo
>
> System.
>
> Math.Ceiling
>
> Só arredonta pra inteiro pelo que vi...
>
>
>
> Abraços
>
> --
> Geraldo Magela G Barboza
> (11) 7999-0147
> att.
> Bruno Gross
> Analista de Sistemas
> Celular: (21) 78545483
> Rádio ID: 83*39379
>
> Esta mensagem, incluindo seus anexos, pode conter informações
> confidenciais e/ou privilegiadas. Se você não for a pessoa
> autorizada a receber esta mensagem, não pode usar, copiar ou
> divulgar as informações nela contidas ou tomar qualquer ação baseada
> nessas informações. Caso esta mensagem tenha sido recebida por
> engano, por favor avise imediatamente o remetente, respondendo o
> e-mail e em seguida elimine-a do seu sistema. Agradeço sua cooperação.
>
> Geraldo Magela G Barboza
> (11) 7999-0147
> geraldo...@gmail.com <mailto:geraldo...@gmail.com>
>
> >

Paulo Roberto Pellucci

unread,
Nov 17, 2009, 7:45:04 AM11/17/09
to dotn...@googlegroups.com
Se você gostaria de ter isto na Math, aplique extension method na biblioteca então, rs..

2009/11/17 Alex GMAIL <alexdb...@gmail.com>
--
Atenciosamente,
Paulo Roberto S. Pellucci

Vinicius Quaiato

unread,
Nov 17, 2009, 7:52:18 AM11/17/09
to dotn...@googlegroups.com
Só lembrando que o méotdo ToString faz um arredondamento para cima,

:p



Att,
Vinicius Quaiato
www.viniciusquaiato.com
Google Talk: vinicius.quaiato


2009/11/17 Julio Schneider <julio...@gmail.com>

Julio Schneider

unread,
Nov 17, 2009, 8:02:03 AM11/17/09
to dotn...@googlegroups.com
Ah eh hehe =P

double value = 123456.789876;
Console.WriteLine(String.Format("{0:0.00}", (Math.Floor(value * 100) / 100));

Valeu rs

2009/11/17 Vinicius Quaiato <vinicius...@gmail.com>

Bruno Gross

unread,
Nov 17, 2009, 8:35:17 AM11/17/09
to dotn...@googlegroups.com
Caraca, q podre necessitar de um bacalhau de leve pra fazer isso!

eu hein

2009/11/17 Julio Schneider <julio...@gmail.com>



--
Visite: www.UpaLele.com

Julio Schneider

unread,
Nov 17, 2009, 8:39:23 AM11/17/09
to dotn...@googlegroups.com
faz aí.

2009/11/17 Bruno Gross <bruno...@gmail.com>

Bruno Gross

unread,
Nov 17, 2009, 8:40:49 AM11/17/09
to dotn...@googlegroups.com
não to questionando se funciona não Julio

to falando q é estranho a linguagem não ter esse recurso intríseco

2009/11/17 Julio Schneider <julio...@gmail.com>

Julio Schneider

unread,
Nov 17, 2009, 8:45:39 AM11/17/09
to dotn...@googlegroups.com
ah tah eheheh sorry =P

Na verdade mesmo, já trabalhei com PHP, Java (mto pouco) e agora com C# e nunca vi nada desse tipo em nenhum delas, todas tem ceil, round, etc, mas esse caso específico, sempre que vc vai tirar casas depois da vírgula ele arredonda para o mais próximo (que na verdade é regrinha básica de matemática neh)

Mas é isso aí, se alguém souber de algo meio gerado automaticamente seria fantástico =)

Abraços,
Julio Schneider

2009/11/17 Bruno Gross <bruno...@gmail.com>

Vinicius Quaiato

unread,
Nov 17, 2009, 8:51:04 AM11/17/09
to dotn...@googlegroups.com
A questão é entender o que é requerido...

O grande problema é que as pessoas fazem mal uso dos tipos da linguagem.

Por exemplo em .NET geralmente usam double ou float para trabalhar com valores monetários, aí você multiplica um double por um inteiro e dá uma merda federal e precisa ficar "arredondando" (pois isso não é arredondamento, é truncar).

A MS recomenda usar o tipo decimal para trabalhar com valores monterários, pois o decimal é baseado na base decimal(base 10) que é a que trabalhamos, mas os outros tipos são base 2, e por isso existem esses problemas bizarros.



Att,
Vinicius Quaiato
www.viniciusquaiato.com
Google Talk: vinicius.quaiato


2009/11/17 Bruno Gross <bruno...@gmail.com>

Haline

unread,
Nov 17, 2009, 9:00:55 AM11/17/09
to dotn...@googlegroups.com
Mas o que teria a ver o tipo de dados com o fato de o cara querer "truncar" o número, por acaso usando decimal ele teria um método Decimal.QueroSoDuasCasas?
O que você sugere?
Obs: Já tive o mesmo problema...

Att,
Haline


2009/11/17 Vinicius Quaiato <vinicius...@gmail.com>



--
Atenciosamente,
Haline Gregório
(11) 7978-8393


Julio Schneider

unread,
Nov 17, 2009, 9:10:33 AM11/17/09
to dotn...@googlegroups.com
Isso não é um problema de truncar não. É regrinha de matemática hehehe =P

Arredondar 15,256 = 15,26
Arredondar 15,254 = 15,25

E nesse caso ele queria que em qualquer caso ficasse 15,25

aí a gente fez aquela pequenina gambi

2009/11/17 Haline <halin...@gmail.com>

Haline

unread,
Nov 17, 2009, 9:12:56 AM11/17/09
to dotn...@googlegroups.com
Então ele queria truncar e não arredondar! :P



2009/11/17 Julio Schneider <julio...@gmail.com>

Ricardo Rocha

unread,
Nov 17, 2009, 9:19:13 AM11/17/09
to dotn...@googlegroups.com
valor.ToString("N2");

e

http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx

[]'s



Ricardo José Alves da Rocha
Porto Alegre - RS


2009/11/17 Haline <halin...@gmail.com>

Henrique Bizarria

unread,
Nov 17, 2009, 9:39:21 AM11/17/09
to dotn...@googlegroups.com
Se ta querendo montar um CAIXA 2?????

2009/11/17 Julio Schneider <julio...@gmail.com>

Alex GMAIL

unread,
Nov 18, 2009, 7:37:28 AM11/18/09
to dotn...@googlegroups.com
CAIXA 2 ???!!!!
HAHAHAHAHA

Henrique Bizarria escreveu:
> Se ta querendo montar um CAIXA 2?????
>
> 2009/11/17 Julio Schneider <julio...@gmail.com
> <mailto:julio...@gmail.com>>
>
> Isso não é um problema de truncar não. É regrinha de matemática
> hehehe =P
>
> Arredondar 15,256 = 15,26
> Arredondar 15,254 = 15,25
>
> E nesse caso ele queria que em qualquer caso ficasse 15,25
>
> aí a gente fez aquela pequenina gambi
>
> 2009/11/17 Haline <halin...@gmail.com <mailto:halin...@gmail.com>>
>
> Mas o que teria a ver o tipo de dados com o fato de o cara
> querer "truncar" o número, por acaso usando decimal ele teria um
> método Decimal.QueroSoDuasCasas?
> O que você sugere?
> Obs: Já tive o mesmo problema...
>
> Att,
> Haline
>
>
> 2009/11/17 Vinicius Quaiato <vinicius...@gmail.com
> <mailto:vinicius...@gmail.com>>
>
> A questão é entender o que é requerido...
>
> O grande problema é que as pessoas fazem mal uso dos tipos
> da linguagem.
>
> Por exemplo em .NET geralmente usam double ou float para
> trabalhar com valores monetários, aí você multiplica um
> double por um inteiro e dá uma merda federal e precisa ficar
> "arredondando" (pois isso não é arredondamento, é truncar).
>
> A MS recomenda usar o tipo decimal para trabalhar com
> valores monterários, pois o decimal é baseado na base
> decimal(base 10) que é a que trabalhamos, mas os outros
> tipos são base 2, e por isso existem esses problemas bizarros.
>
>
>
> Att,
> Vinicius Quaiato
> www.viniciusquaiato.com <http://www.viniciusquaiato.com/>
> Google Talk: vinicius.quaiato
> Twitter <http://www.twitter.com/vquaiato>
>
>
> 2009/11/17 Bruno Gross <bruno...@gmail.com
> <mailto:bruno...@gmail.com>>
>
> não to questionando se funciona não Julio
>
> to falando q é estranho a linguagem não ter esse recurso
> intríseco
>
>
> 2009/11/17 Julio Schneider <julio...@gmail.com
> <mailto:julio...@gmail.com>>
>
> faz aí.
>
> 2009/11/17 Bruno Gross <bruno...@gmail.com
> <mailto:bruno...@gmail.com>>
>
> Caraca, q podre necessitar de um bacalhau de
> leve pra fazer isso!
>
> eu hein
>
>
> 2009/11/17 Julio Schneider <julio...@gmail.com
> <mailto:julio...@gmail.com>>
>
> Ah eh hehe =P
>
> double value = 123456.789876;
> Console.WriteLine(String.Format("{0:0.00}",
> (Math.Floor(value * 100) / 100));
>
> Valeu rs
>
> 2009/11/17 Vinicius Quaiato
> <vinicius...@gmail.com
> <mailto:vinicius...@gmail.com>>
>
> Só lembrando que o méotdo ToString faz
> um arredondamento para cima,
>
> :p
>
>
>
> Att,
> Vinicius Quaiato
> www.viniciusquaiato.com
> <http://www.viniciusquaiato.com/>
> Google Talk: vinicius.quaiato
> Twitter <http://www.twitter.com/vquaiato>
>
>
> 2009/11/17 Julio Schneider
> <julio...@gmail.com
> <mailto:julio...@gmail.com>>
>
> Exemplificação do que o Alex falou
> (eu que ia dar essa resposta,
> cheguei atrasado hehehe =P)
>
> double value = 123456.789876;
> Console.WriteLine((Math.Floor(value
> * 100) / 100).ToString());
>
> Mais fácil que seu método =)
>
> Abrax!
>
>
> 2009/11/17 Alex GMAIL
> <alexdb...@gmail.com
> <mailto:alexdb...@gmail.com>>
>
>
> Multiplica por 100, pega a parte
> inteira e divide por 100.
> Att,
> Alex Barreto
>
> Geraldo M G Barboza escreveu:
> > Math.Floor retorna o inteiro..
> queria arredondar com as duas casas
> > decimais para baixo.
> >
> > fazendo assim:
> >
> > String
> >
> >
> .Format("{0:F2}",Math.Floor(12345.128666))
> >
> > o resultado é 12345.00
> >
> > o que preciso é: 12345.12
> >
> >
> >
> > 2009/11/17 Bruno Gross
> <bruno...@gmail.com
> <mailto:bruno...@gmail.com>
> <mailto:bruno...@gmail.com
> <mailto:bruno...@gmail.com>>>
> >
> > o Math.Floor faz isso não?
> >
> > 2009/11/17 Geraldo M G
> Barboza
> <geraldo...@gmail.com
> <mailto:geraldo...@gmail.com>
> >
> <mailto:geraldo...@gmail.com
> <mailto:geraldo...@gmail.com
> <mailto:geraldo...@gmail.com
Reply all
Reply to author
Forward
0 new messages