É comum na vida do programado deparar-se com situações 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 não sabem é que o Delphi oferece suporte para estas formas de arredondamento, basta um pouco de dedicação para entendermos melhor a forma de configurar e o comportamento dessas rotinas.
São elas: Round(), RoundTo(), SimpleRoundTo(), SetRoundMode() e GetRoundMode(). Abordarei agora cada uma de forma conceitual e prática:
function Round(X: Real): Int64;
A função Round retorna um valor inteiro arredondado para o número inteiro mais próximo do valor passado como parâmetro. Ela utiliza por padrão o método de arredondamento do banqueiro(ver nota).
Parâmetros:
- X: Valor a ser arredondado.
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
function RoundTo(const Avalue: Extended; const Adigit: TroundToRange): Extended;
O que difere a função RoundTo da Round é o fato de podermos arredondar números com casas decimais. Também utiliza o "arredondamento do banqueiro".
Parâmetros:
- Avalue: Valor a ser arredondado.
- Adigit: Na prática é a quantidade de dígitos que se deseja arredondar
Avalue. Por exemplo, se você deseja arredondar um valor que possui três casas decimais para um novo valor com duas casas decimais, então informe nesse parâmetro o valor -2. Adigit aceita valores entre -37 a 37(inclusive).
//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 função SimpleRoundTo arredonda um valor real para um determinado dígito ou potência de dez. Utiliza o "arredondamento aritmético assimétrico", 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.
Parâmetros:
- Avalue: Valor a ser arredondado.
- Adigit: Na prática é a quantidade de dígitos que se deseja arredondar
Avalue. Por exemplo, se você deseja arredondar um valor que possui quatro casas decimais para um novo valor com três casas decimais, então informe nesse parâmetro 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 questões de arredondamento.
Valor | Significado |
---|---|
rmNearest | Arredonda para o valor mais próximo e é o modo default. |
rmDown | Arredonda para baixo. |
rmUp | Arredonda para cima. |
rmTruncate | Trunca o valor. |
program Project2;
uses
math, sysutils, clipbrd;
var
s: string;
procedure trythis(sMode: string);
procedure tryone(d: double);
begin
s := s + Format(''%1.3f %d%s'', [d, Round(d), #13 + #10]);
end;
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;
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 questões de arredondamento.
if (GetRoundMode <> rmNearest) then
begin
if (MessageDlg("Modo de arredondamento Alterado!" + #10#13 +
"Deseja voltar configuração Default?", mtConfirmation, [mbYes, mbNo], 0) = mrYes)
then
begin
SetRoundMode(rmNearest);
end;
end;
Aplicações Práticas e Casos de Uso
1. Aplicações Financeiras
O arredondamento preciso é essencial, por exemplo, no cálculo de juros compostos ou arredondamento de valores monetários, desta forma a forma do método de arredondamento pode impactar nos resultados.
2. Processamento de Dados Científicos
Em projetos científicos e de engenharia, comumente lidamos com números de alta precisão. Desta forma o uso de rotinas como RoundTo() permitirá arredondarmos os resultados para o número de casas decimais desejados, o que facilita a análise e apresentação dos dados.
3. Jogos e Simulações
O arredondamento é muito usado para simplificar cálculos de física. Por exemplo, o método SimpleRoundTo() pode ser usado para acertar a posição de um objeto ou calcular a pontuação de um jogador.
4. Aplicações de Contabilidade
Softwares de contabilidade necessitam de alta precisão nos cálculos de valores monetários. Por isso é essencial utilizar rotinas de arredondamento adequadas, para garantir valores finais precisos e conforme as devidas regras contábeis.
5. Interfaces de Usuário
A exibição de dados numéricos numa interface ao usuário, comumente são arredondados os valores para melhorar sua legibilidade. Por exemplo, em gráficos e tabelas, isso porque valores arredondados são mais fáceis de entender para os usuários.
Método Round para Normalização de Dados com IA
A normalização de dados é um passo fundamental no processo de treinamento de modelos de inteligência artificial. Isso porque ajustam os valores de diferentes características, o que melhora o desempenho e a junção dos algoritmos de aprendizado de máquina. O método Round() pode ser usado para arredondar valores normalizados a um número fixo de casas decimais.
1. O Papel da Normalização em IA
- Melhora a precisão
- Reduz a variabilidade
- Facilita a comparação
2. Integração com Modelos de IA
Depois que os dados são normalizados e arredondados, podemos usá-los como entrada para os modelos de IA. Isso garantirá que todas as características tenham a mesma escala, o que facilitará todo o aprendizado do modelo.
- Melhoria do Desempenho
- Estabilidade Numérica
- Compatibilidade de Dados
A normalização de dados é uma etapa fundamental no desenvolvimento de modelos de inteligência artificial, e o método Round() é uma ferramenta valiosa nesse processo. Arredondamento de valores normalizados permitirá precisão e consistência nos dados para treinamento de modelos de IA.
É isso, qualquer dúvida ou sugestão é só deixar um comentário.Até a próxima e obrigado.