Vous êtes sur la page 1sur 4

17/11/12

Rotinas de arredondamento: Round, RoundTo, SimpleRoundTo, SetRoundMode e GetRoundMode

Pesquisar

Home

Entenda o site

Revistas LO GIN:

Tecnologias SENHA:

Cursos

Loja Virtual

Frum

Servios

Publicar

A ssine

Compre Crditos

Bem vindo a DevMedia!

Esque ci m inha se nha

C adastre -se

d seu feedback

post favorito
Voc e st e m : canal De lphi +Delphi: Publicidade artigos | vde os | cursos | m ais

Rotinas de arredondamento: Round, RoundTo, SimpleRoundTo, SetRoundMode e GetRoundMode


Como falei no meu ltimo artigo sobre Rotinas matemticas para manipulao numrica estarei hoje falando das rotinas nativas do Delphi para arredondamento. 3 0 Curtir 0

comum na vida do programado deparar-se com situaes em que necessite arredondar um determinado valor, ou utilizando o arredondamento para cima ou o arredondamento do banqueiro e ainda definir a quantidade de casas decimais, isso se for ter casas decimais. O que alguns no sabem que o Delphi oferece suporte para estas formas de arredondamento, basta um pouco de dedicao para entendermos melhor a forma de configurar e o comportamento dessas rotinas. So elas: Round(), RoundTo(), SimpleRoundTo(), SetRoundMode() e GetRoundMode(). Abordarei agora cada uma de forma conceitual e prtica: - function Round(X: Real): Int64; A funo Round retorna um valor inteiro arredondado para o nmero inteiro mais prximo do valor passado como parmetro. Ela utiliza por padro o mtodo de arredondamento do banqueiro(ver nota). Parmetros: X: Valor a ser arredondado. Exemplos: Round(12.6); //retorna 13 Round(13.4); //retorna 13 Round(13.5); //retorna 14 Round(14.5); //retorna 14 Round(15.5); //retorna 16 Nota: Para maiores informaes sobre o mtodo de arredondamento do banqueiro ver Rotinas matemticas para manipulao numrica. Nota 1: O resultado pode ser diferente se a forma como a FPU(Float Point Unit) lida com questes de arredondamento for alterada atravs da funo SetRoundMode.
Favorito: Comentrios: Feedback: Utilidade: 1 0

Autor
Rafael Santos Pimenta
Form ado e m C i ncia da C om putao pe la Faculdade Pitgoras. Analista de inform tica pe la e m pre sa Spre ss Software , utilizando a linguage m De lphi e o SGBD Fire bird. Possui o blog: http://de lphie x pre sso.blogspot .com / Space do autor

Estatsticas
2 vez(es) 0

- function RoundTo(const Avalue: Extended; const Adigit: TroundToRange): Extended; O que difere a funo RoundTo da Round o fato de podermos arredondar nmeros com casas decimais. Tambm utiliza o "arredondamento do banqueiro". Parmetros: Avalue: Valor a ser arredondado. Adigit: Na prtica a quantidade de dgitos que se deseja arredondar Avalue. Por exemplo, se voc deseja arredondar um valor que possui trs casas decimais para um novo valor com duas casas decimais, ento informe nesse parmetro o valor -2. Adigit aceita valores entre -37 a 37(inclusive). Exemplos: //retorna 1235000 RoundTo (1.234, -2); //retorna 1.23 RoundTo (1.235, -2); //retorna 1.24 RoundTo (1.245, -2); //retorna 1.24 - function SimpleRoundTo(const AValue: Single(Double ou Extended); const ADigit: TRoundToRange = -2): Single(Double ou Extended); A funo SimpleRoundTo arredonda um valor real para um determinado dgito ou potncia de dez. devmedia.com.br//21114

Servios
Inclua um comentrio Adicionar aos Favoritos Marcar como lido/assistido Incluir anotao pessoal
(ajuda)

D seu voto para este post Verso para impresso

1/4

17/11/12 de dez.

Rotinas de arredondamento: Round, RoundTo, SimpleRoundTo, SetRoundMode e GetRoundMode

Utiliza o "arredondamento aritmtico assimtrico", ou seja, aquele que aprendemos na escola, onde arredondamos para cima os valores terminados em 5,6,7,8 e 9 e para baixo os terminados em 1,2,3,4. Parmetros: Avalue: Valor a ser arredondado. Adigit: Na prtica a quantidade de dgitos que se deseja arredondar Avalue. Por exemplo, se voc deseja arredondar um valor que possui quatro casas decimais para um novo valor com trs casas decimais, ento informe nesse parmetro o valor -3. O valor default de Adigit -2. Exemplos: //retorna 1235000 SimpleRoundTo (1.234, -2); //retorna 1.23 SimpleRoundTo (1.235, -2); //retorna 1.24 SimpleRoundTo (-1.235, -2); //retorna - 1.23 -function SetRoundMode(const RoundMode: TFPURoundingMode): TFPURoundingMode; Define a forma com que a FPU ir lidar com questes de arredondamento.

Modos de arredondamento:
Valor rm Ne are st rm Down rm Up Significado Arre donda para o valor m ais prx im o e o m odo de fault. Arre donda para baix o. Arre donda para cim a.

rm Truncate Trunca o valor.

Exemplos: program Project2; uses math, sysutils, clipbrd; var s: string; procedure trythis(sMode: string); procedure tryone(d: double); begin s := s + Format(''%1.3f end; %d%s'', [d, Round(d), #13 + #10]);

begin s := s + #13#10 + sMode + #13#10; tryone(0.50); tryone(1.50); tryone(2.45); tryone(2.50); tryone(2.55); tryone(3.45); tryone(3.50); tryone(3.55); end; begin s := inttostr(integer(GetRoundMode)); SetRoundMode(rmNearest); trythis(''nearest''); SetRoundMode(rmDown); trythis(''down''); SetRoundMode(rmUp); trythis(''up''); SetRoundMode(rmTruncate); trythis(''trunc''); Clipboard.Astext := s; devmedia.com.br//21114

2/4

17/11/12 Rotinas de arredondamento: Round, RoundTo, SimpleRoundTo, SetRoundMode e GetRoundMode Clipboard.Astext := s; end. Execute o programa, depois d um Ctrl+C no Bloco de Notas. Agora analise os resultados comparando com cada modo de arredondamento. - function GetRoundMode: TFPURoundingMode; Retorna a forma com que a FPU lida com questes de arredondamento. Exemplo: if (GetRoundMode <> rmNearest) then begin if (MessageDlg(''Modo de arredondamento Alterado!'' + #10#13 + ''Deseja voltar configurao Default?'', mtConfirmation, [mbYes, mbNo], 0) = mrYes) then begin SetRoundMode(rmNearest); end; end; isso, qualquer dvida ou sugesto s deixar um comentrio ou me enviar um e-mail. At a prxima e obrigado.

0 COMENTRIO
Ne nhum com e ntrio foi postado - se ja o prim e iro a com e ntar!

cursos relacionados

posts em sequncia

ltimos do autor

C urso online - Aplicaes C lient/Server com dbExpress e Firebird C urso Online - Sistema SysC ash C urso Online - C riando uma Aplicao multi-camadas C ompleta com Delphi Aplicaes client/server com Windows Forms no Delphi 2006 Administrao do Firebird/InterBase [Ver todos]

devmedia.com.br//21114

3/4

17/11/12

Rotinas de arredondamento: Round, RoundTo, SimpleRoundTo, SetRoundMode e GetRoundMode DevMedia no Facebook


Curtir 4,368 pessoas curtiram DevMedia.

DevMedia | Anuncie | Fale conosco Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Dire itos R e se rvados a web-03

G ildicley A lv es Daniel Junior P lug-in social do F acebook

Daniel

M arcello

H eulem

A lexandre

G uilherme De OLuciano liv eira

devmedia.com.br//21114

4/4