Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Pesquisar
Home
Entenda o site
Revistas LO GIN:
Tecnologias SENHA:
Cursos
Loja Virtual
Frum
Servios
Publicar
A ssine
Compre Crditos
C adastre -se
d seu feedback
post favorito
Voc e st e m : canal De lphi +Delphi: Publicidade artigos | vde os | cursos | m ais
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)
1/4
17/11/12 de dez.
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.
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
DevMedia | Anuncie | Fale conosco Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Dire itos R e se rvados a web-03
Daniel
M arcello
H eulem
A lexandre
devmedia.com.br//21114
4/4